Haskell の関数

1. 関数と引数

Haskell の関数を使うには、関数 引数1 引数2 ... のように関数名の後にスペースで区切って引数を並べていくだけだ。カッコも、コンマもいらない。

書き忘れていたが、Hugs は Windows でも使える。WinHugs がそれだ。ただし、アンインストールできないかもしれない。また、Vista で使うときには、Program Filesには入れず、C:\直下に C:\Hugs のようなフォルダーを作って入れたほうが無難だ。

Hugs> div 6 2
3
Hugs> sum [1,2,3,4,5]
15
Hugs> sin (pi * 0.5)
1.0

2. 関数と演算子

演算子は普通の計算のように、引数の間に置く、カッコも使える。

Hugs> (1 + 2) * 3
9
Hugs> "hello, " ++ "world"
"hello, world"

また、‘ (バッククォート)で囲むと演算子のように使える関数もある。
Main> 6 `div` 2
3

逆に + のような演算子も()で囲むと関数名のように使える。
Hugs> (+) 1 2
3

関数のほうが演算子より、優先順位が上だ。

Hugs> length [1,2] + length [3,4,5]
5

3. モジュールに定義されている関数の使い方

関数の中には、モジュールを読み込まないと使えないものがある。たとえば、sort は Hugs を立ち上げてすぐには使えないが、

Hugs> sort [2,1,8,7]
ERROR - Undefined variable "sort"

:load コマンドで List モジュールを読み込むと使えるようになる。(ghci のときは :module +Data.List)

Hugs> :load List
List> sort [2,1,8,7]
[1,2,7,8]

4. 関数を連結する

関数は $ 演算子でつないで使うことができる。

List> reverse $ sort [2,1,8,7]
[8,7,2,1]

5. エディタで関数を定義する

Hugs の関数の定義は、コマンドラインからはできず、ファイルを作成しなければならないが、:edit コマンドでファイルを編集できる。ただし、Linux の Hugs の場合は、コマンドラインから Hugs を立ち上げるときに、hugs -Evi のように -E オプションでエディターを指定する必要がある。(ghci では Prelude> :set editor vi)

List> :edit fact.hs

fact.hs の中身

fact :: Integer -> Integer
fact 0 = 1
fact n | n > 0 = n * fact (n-1)

ファイルは使う前に :load する。

List> :load fact.hs
Main> fact 5
120

6. コマンドラインで関数を定義する

使い捨てのプログラムを試すのに、ファイルを作るのが面倒な時は、定義を where 句以下に置く、このとき文の区切りに ; (セミコロン)を置く。

Main> fact 5 where fact 0 = 1; fact n | n > 0 = n * fact (n-1)
120

注: ghci の場合はwhereは let キーワードの後でしか使えないのであらかじめ fact を定義して使う。

Prelude> let fact 0 = 1; fact n | n > 0 = n * fact (n-1)
Prelude> fact 5
120

以上がマニュアルを探しても簡単には見つからない、Hugsで関数を使うときのコツだ。これだけ分かっていれば、後は参考書やウェブの Haskell のプログラムを打ち込んで走らせてみることができる。

Huskell は説明はやたらと難しいが、使ってみると考えたことがそのままプログラムにできる感じで使いやすい。しばらく使ってその感触に慣れてから本を改めて読むと分かりやすくなる。自分で理解できた部分だけでいいからしばらく使ってみると、Haskell の楽しさが分かる。

[PR]
by tnomura9 | 2009-08-07 06:46 | Haskell | Comments(0)
<< Haskell の遅延評価 Haskell の高階関数 >>