読者です 読者をやめる 読者になる 読者になる

ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

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を::を用いて指定する必要がある。(これをしないとエラーになる)