CoffeeScriptでチャーチ数(CoffeeScriptとラムダ式)
ラムダ計算では、数値すら関数で表現できるらしいです。
数値を関数で表現する方法のひとつにチャーチ数というものがあるとのこと。
何で書いてみようかなと迷ったのですが、この手の処理をシンプルに書けそうだと思ったので、CoffeeScriptで書いてみることにしました。多分、正解だったと思います。
サンプルコード
church.coffee
church.js
関数適用の数で自然数を表現するってのが面白いし、まず発想できないですね。
ややこしかったので間違ってるかもしれませんが、簡約していくと、こんな感じになるのでしょうか。
最初は関数がメタな表現過ぎて、何をしたいのか頭で整理しきれませんでしたが、参考サイトを見ながら、書いてみて、実行して、理解できました。生JavaScriptで書こうとしていたら、もっと理解に苦しんだでしょう。
なんでも関数で表現できるラムダ計算ってすごいですね。データ構造や条件分岐も関数で表現できるそうです。
まとめ
CoffeeScriptは、以前の記事で、OCamlっぽいっとか言ったことがありましたが、確かにOCaml並にラムダ式が簡潔に書けます。
今回のように、ラムダ式の表現をその言語での書き方に置き換える時、JavaScriptだと苦行で、Schemeでもちょっと面倒です。
生まれた背景からして当然なのですが、OCamlだとラムダ式をほとんどそのままでOCamlのコードとして書けるので、CofeeScriptよりも簡潔です。*1
OCamlの話は置いといて、上杉周平さんの作ったプログラミング学習サイトのchibicodeでも、CoffeeScriptを採用されたそうですが、CoffeeScriptは教育用言語としては、アリだと思います。Rubyみたいに実行可能な擬似コードして使用できる側面を感じます。
とりあえず、ラムダ計算の勉強には使えそうだなと思いました。