言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

表記法の進化

アレックスに借りてる Perter Henderson 著 Functional Programming isbn:0133315797 を読んでいます。彼曰く、今まで読んだ本で一番良い本で、しかも絶版らしいので、これはちゃんと読んで返さねばと思うんだけど、これが読みにくいのです。関数型言語の色んなテクニックを著者が考えた俺言語(LISP の派生)で書いてあるんだけど、これがどうも馴染めない。実はこの言語自体がこの本の大きなテーマで、最後まで読むとこの言語を自分で実装出来るようになるらしいのだが、それどころか最初の 40 ページくらいで詰まってしまった。

で、悪いのはこの俺言語だ!と思うことにした。そしてためしに例題を全て Haskell で書き直してみるとこれが非常に分かりやすい。例えば、効率の良いリスト反転の例

;; Peter さんの言語
reverse(x) ≡ rev(x, NIL)
rev(x, y)  ≡ if eq(x, NIL) then y else
                rev(cdr(x), cons(car(x), y))

-- Haskell で書くとこうなる
reverse x   = rev x []
rev [] y     = y
rev (x:xs) y = rev xs (x:y)

ほら、全然分かりやすいでしょう。cdr とか、cons とか、そんな物この場合本質に関係ないので適当にシンタックスシュガーがあったほうが分かりやすい。しかも Haskell だと僕のパソコンでちゃんと実行出来る!という事で、この本全部 Haskell で書き直せばすごく分かりやすくなるんじゃないかと思った。本の内容自体は基礎的だから、20年以上経っても概念は全然古びてないんだけど、表記法は随分進化したもんだなあと思ったのでした。