home


[letとwhere文]

関数を定義する際,その関数の内部でのみ使用する関数を定義することが出来ます.

1. Let文

let文ではキーワードletに続けて,内部で利用したい定数や関数の定義を並べて書きます.この時インデントが揃っていなければなりません. その後本体をキーワード in do の後に書きます. 以下letを使用した関数の定義例を示します.let内で定義している定数や関数は,let文の内部でのみ利用できます.
letTest1 x = let a = 3
                 f v = v + 2
             in do a * f x
let内の定義文は相互に依存することが可能です.以下その例です.
letTest2 x = let a = b + 3
                 b = 2
                 f c = a * b + c
             in do a * f x
上で定義した関数を適用すると以下のようになります.
*Main> letTest1 2
12
*Main> letTest2 2
60

2. Where文

where文はlet文と良く似ています.where文では関数の本体を書いた後で,whereキーワードに続けて局所的な定数や関数を定義します. 上記のletTest1とletTest2をそれぞれwhere文を用いて書き換えると以下のようになります.
whereTest1 x = a * f x 
  where a = 3
        f v = v + 2
        
whereTest2 x = a * f x 
  where a = b + 3
        b = 2
        f c = a * b + c
上で定義した関数を適用すると以下のようになります.
*Main> whereTest1 2
12
*Main> whereTest2 2
60