クロージャ
ふつけるの4章に、関数内で関数を定義する方法があったのでクロージャを作ってみよう。
closure :: Int -> (Int -> Int) closure x = fn where fn :: Int -> Int fn y = x + y main = do let f = closure 95 print $ f 5
うまく行きました。
しかしながら、これだけやるなら部分適用で・・・
add :: Int -> Int -> Int add x y = x + y main = do let f = add 5 print $ f 5
さらに+自体も関数なので
main = do let f = (45 +) print $ f 5
とできる。
最初、
let f = 45 +
と書いたらはじかれたけど、括弧でくくってやったらうまく行った。
部分適用についてはLispに比べてHaskellが断然らむだ楽だ。