Haskellでa~zのアルファベットを表現する


このエントリーをはてなブックマークに追加

結論から書くと、'a' <= x && x <= 'z' と書いてやればよいっぽい


Rubyでaからz

Rubyだと、a~zとかアルファベット全部(a-z, A-Z)を書く時は正規表現的な書き方で
[a-z]とか[a-zA-Z]とか記述するし
アルファベットの配列が欲しい時は

1
2
('a'..'z').to_a
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

と書いてやれば良い


Haskellの場合


Haskellだと、関数プログラミング実践入門の本に載ってる例を参考にするなら

第3章のパターンマッチとガードを組み合わせるのところででてきたコードを参考にすると

1
2
3
4
5
6
caseOfFirstLetter :: String -> String
caseOfFirstLetter "" = "empty"
caseOfFirstLetter (x:xs)
| 'a' <= x && x <= 'z' = "lower"
| 'A' <= x && x <= 'Z' = "upper"
| otherwise = "other"

のように、'a' <= x && x <= 'z' のように書いてやればよいっぽい

大文字を表す時は'A' <= x && x <= 'Z'となるし

小文字も大文字も全て含めたいなら ('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z')のようにかけばひとまず大丈夫かな?
この辺りはもうちょっと調べてみる

・・・
第四章を読んでたら出てきた

1
2
3
4
5
6
7
8
Prelude> ['A'..'Z']
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Prelude> ['A'..'z']
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz"
Prelude> ['A'..'Z'] ++ ['a'..'z']
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

でいろいろ生成できるっぽい

【20160826 追記】
よく調べてみたらHaskellのチートシートの中に記述があった
Haskellチートシート(翻訳)


このエントリーをはてなブックマークに追加