らんだむな記憶

blogというものを体験してみようか!的なー

はぢめてのHaskell(4)

熱方程式の件が期待しない結果になったので現実逃避。

面倒だから、はぢめての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