昨日のエントリー「Haskell の構文に惑わされているね」を少し引っ張るんだけど; Haskellの関数定義/呼び出し*1構文は、誤解や混乱を招く危険もあるにはあるけど、やっぱり巧みに出来ているなー。誤解したまま使ってもツジツマがあうところが素晴らしい。 その誤解とは、f x y のような書き方を2引数(2変数)関数だと思うこと。昨日の例 g a b x = a*x + b を使うけど、絵の描きやすさの都合から、a*x + b を b + a*x の形に書きますね。 g b a x = b + a*x これは、次の図1のように思っても問題ありません。 図1 g とは、 b a x | \ / \ * \ / + | けど、より精密に描けば(アスキー絵では無理) 図2 掛け算のところから説明すると; a*x という算術の式は、(*) a x のことです。(*)の正体は λs.λt.(mul