熱方程式の件が期待しない結果になったので現実逃避。
面倒だから、はぢめてのHaskell(2) - らんだむな記憶の時点で
$ sudo apt-get install haskell-platform
で入ってしまったHaskellで遊ぶ。結局無意味にDockerを入れたり、GHCをビルドしたり、なんだかなーな数時間。
Rubyistに贈るHaskell入門 - Qiitaを参考にイミフメイな世界を味わってみる。
$ ghci Prelude> let multi x = (\y -> x * y) Prelude> multi 3 2 6 Prelude> multi 3 5 15
おぉっ、なんかキモぃけど動いた!
Prelude> let hoge(a, b) = (\x -> a + b * x) Prelude> hoge(2,4) 8 34
ふむ。こんな感じだな。
Prelude> let hoge(a, b) = \x -> a + b * x
このくらいまでは省略できるみたい。あぁ、なんか確かに記号論理学を感じるゎ。(大袈裟?)
呼び出しも、
Prelude> hoge(2,4)(8)
などでもいける。省略可能な括弧がどばどば省略できるわけだ。
Prelude> let hoge a b = \x -> a + b * x
こうすると、hogeはcurry化とかいう機構がはたらくようで、
Prelude> hoge(2,4)(8)
などとは書けない。1個ずつ引数を処理しながらどんどん関数が内部的に作られるから、
Prelude> hoge(2)(4)(8) 34
のような動きか。hoge(2)で関数が作られて、その関数が4を引数にとってhoge(2)(4)という関数ができてこれが「\x -> a + b * x」になっているから、最後の引数8をとって、値 2+4*8=34 が計算されると。
なので、括弧を省略すると、
Prelude> hoge 2 4 8 34
うはっwww