あと味

たくさん情報を食べて、たくさん発信すると、あとになって味わい深い。

CoffeeScriptでチャーチ数(CoffeeScriptとラムダ式)

ラムダ計算では、数値すら関数で表現できるらしいです。

数値を関数で表現する方法のひとつにチャーチ数というものがあるとのこと。

何で書いてみようかなと迷ったのですが、この手の処理をシンプルに書けそうだと思ったので、CoffeeScriptで書いてみることにしました。多分、正解だったと思います。

サンプルコード

church.coffee

church.js

関数適用の数で自然数を表現するってのが面白いし、まず発想できないですね。

ややこしかったので間違ってるかもしれませんが、簡約していくと、こんな感じになるのでしょうか。

最初は関数がメタな表現過ぎて、何をしたいのか頭で整理しきれませんでしたが、参考サイトを見ながら、書いてみて、実行して、理解できました。生JavaScriptで書こうとしていたら、もっと理解に苦しんだでしょう。

なんでも関数で表現できるラムダ計算ってすごいですね。データ構造や条件分岐も関数で表現できるそうです。

まとめ

CoffeeScriptは、以前の記事で、OCamlっぽいっとか言ったことがありましたが、確かにOCaml並にラムダ式が簡潔に書けます。

今回のように、ラムダ式の表現をその言語での書き方に置き換える時、JavaScriptだと苦行で、Schemeでもちょっと面倒です。

生まれた背景からして当然なのですが、OCamlだとラムダ式をほとんどそのままでOCamlのコードとして書けるので、CofeeScriptよりも簡潔です。*1

OCamlの話は置いといて、上杉周平さんの作ったプログラミング学習サイトのchibicodeでも、CoffeeScriptを採用されたそうですが、CoffeeScriptは教育用言語としては、アリだと思います。Rubyみたいに実行可能な擬似コードして使用できる側面を感じます。

とりあえず、ラムダ計算の勉強には使えそうだなと思いました。

簡潔さは力なり。

*1:Haskellもラムダ式をほとんどそのまま書くっぽい