Haskell入門

Haskellの処理系GHCのインストール(DebianLinuxでの手順)

$ sudo apt install ghc

バージョン確認

$ ghc -v

対話モード(GHCi)の起動

$ ghci

対話モードの終了

Prelude> :q
Leaving GHCi.

以下、対話モードで実行します。

Prelude> 1 + 2
3
Prelude> 3 - 2
1
Prelude> 2 * 3
6
Prelude> 1 + 2 * 3
7
Prelude> (1 + 2) * 3
9
Prelude> 3 / 2
1.5
整数の割り算
Prelude> div 3 2
1
割り算の余り
Prelude> mod 5 3
2

論理演算

AND
Prelude> True && True
True
Prelude> True && False
False

OR
Prelude> True || False
True
Prelude> False || False
False

Prelude> not False
True

Prelude> 1 == 1
True
Prelude> 1 /= 2
True
Prelude> 2 > 1
True

後者を返す関数

Prelude> succ 0
1
Prelude> succ 1
2
Prelude> succ 2
3
マイナスの数を与える場合は括弧をつけないといけないらしい
Prelude> succ (-3)
-2
Prelude> succ 'a'
'b'
Prelude> succ 'b'
'c'
Prelude> succ 'z'
'{'

文字からそれに対応する文字コードを取得する

Prelude> Data.Char.ord 'a'
97
Prelude> Data.Char.ord 'b'
98
Prelude> Data.Char.ord 'z'
122
Prelude> Data.Char.ord '{'
123
Prelude> Data.Char.chr 97
'a'

小さいものを返す関数min
大きいものを返す関数max

Prelude> min 1 2
1
Prelude> min 1 (-1)
-1
Prelude> max 1 2
2
Prelude> max 'a' 'b'
'b'

関数の定義
ファイルのロード
下記のコードをファイル「test.hs」に保存する

add1 x = x + 1

「test.hs」があるディレクトリに移動して、GHCiを起動する
下記のコマンドで「test.hs」をロードする

Prelude> :l test.hs 
[1 of 1] Compiling Main             ( test.hs, interpreted )
Ok, one module loaded.
*Main> 

関数「add1」を実行する

*Main> add1 0
1
*Main> add1 1
2
*Main> add1 (-2)
-1

if文
例として、
引数xが偶数ならば、x/2を返し、
奇数ならば、3x+1を返す関数
collatzを作成する。

collatz x = if (mod x 2) == 0
              then div x 2
              else x * 3 + 1
*Main> collatz 1
4
*Main> collatz 2
1
*Main> collatz 3
10
*Main> collatz 4
2
*Main> collatz 5
16