Haskellで文字と数値の変換したんだよっ
文字通りHaskellで文字(Char)と数値(Int)への変換方法を記しておく。
文字から数値へ
文字から数値にする1つの方法はordを使う方法。Data.Charをインポートする必要がある。
例では'a'を対応するasciiコード97に変換する。
Prelude> import Data.Char Prelude Data.Char> ord 'a' 97
別の方法はfromEnumを使用することである。
Prelude> fromEnum 'a' 97
ordとfromEnumの違いはIntを入力として与えた時である。
Prelude> import Data.Char Prelude Data.Char> fromEnum 100 100 Prelude Data.Char> ord 100 <interactive>:8:5: No instance for (Num Char) arising from the literal `100' Possible fix: add an instance declaration for (Num Char) In the first argument of `ord', namely `100' In the expression: ord 100 In an equation for `it': it = ord 100
このようにfromEnumにInt型の入力を与えるとそのまま帰ってくるがordに与えるとエラーとなる。
これはfromEnumはEnum型を入力として受け取るのにたいして,ordはChar型を入力に受け取るからである。下のようになっている。
Prelude Data.Char> :t fromEnum fromEnum :: Enum a => a -> Int Prelude Data.Char> :t ord ord :: Char -> Int
数値から文字へ
Int型からChar型への変換方法はtoEnumまたはchrを用いる。chrを使用するにはData.Charをインポートする必要がある。
それぞれ下のように使用する。asciiコード97を'a'に変換する。
Prelude> import Data.Char Prelude Data.Char> toEnum 97 :: Char 'a' Prelude Data.Char> chr 97 'a'
それぞれの型は次のようになっている
Prelude Data.Char> :t toEnum toEnum :: Enum a => Int -> a Prelude Data.Char> :t chr chr :: Int -> Char
上の通りtoEnumはIntからEnum aに変換する。そして変換先の型Charを::を用いて指定する必要がある。(これをしないとエラーになる)