let式。
特定の定義のみで有効な束縛ができる。
main = print $ letTest1 5 letTest1 n = let x = n + 1 y = n + 2 z = n + 3 in x * y * z
where節と似ているけど、以下の2点が違う。
- letは式なのでlet自体にも値を持つ、whereは節なので値を持たない
- whereは複数のガードにまたがって有効
使い分けとしては、letの場合は新しい変数を導入するため、whereは関数内で新しい関数を定義するのが一般的。
let式、where節の中で関数の引数と同じ名前の引数を使用した場合
main = print $ letTest1 20 10 letTest1 x y = let y = x * x in y - 1
20 × 20 - 1で結果は、
399
つまり、let式内の変数が使用される。このことをシャドウィング(shadowing)という。
let式内で変数を相互に参照することもできる。
main = print $ letTest letTest = let x = 5 y = x + 2 in x * y
結果。
35
上から参照、下から参照のどちらでも問題ない。
main = print $ letTest letTest = let y = x + 2 x = 5 in x * y
結果は同じになる。
パターンでの束縛も可能。
main = print $ letTest letTest = let(x:xs) = [1,2,3] in xs
結果。
[2,3]
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 314回
- この商品を含むブログ (320件) を見る