言語ゲーム

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

Twitter: @propella

うまく行かない話2

一応記録の為に書く。

先週やろうと思っていたのは、タートルグラフィックスを JavaScript 上に LispKit のような遅延評価の純粋関数型言語として実装しようと思っていた事だ。具体的にはタートルコマンドを遅延リストで表現して、必要に応じて評価する事を考えていた。

理由はいくつかあって

  • if や repeat 等の制御構文でクォートが不要になる。
  • 無限ループを setTimeout をかませつつシコシコ実行するのに都合が良い。
  • 末尾再帰でもスタックがあふれない。
  • プログラムを作成するプログラムを作りたい。

などなど。で、一週間頑張ってみたけど、あまりの面倒さにやっぱり諦める事にした。特に setTimeout の処理がスマートに行くので諦めがたいのだが、このデモのもう一つの目的である Turtle Geometry を見せるというのに注力するには仕方が無い。しかしこの本。末尾再帰がやたら出てくるので本当に後ろ髪を引かれる思いだが、今の私の実力ではここまでだ。なんで再帰javascript の setTimeout の相性が悪いかというと、 http://logo.twentygototen.org/GvMpNPWu で遊んでみれば分かると思う。ようするにあらかじめ全部実行しておいた値を後で setTimeout するくらいしか手が無いので、無限ループは使えない。とほほ。関数型言語にこだわらないで、単にじわじわ動く VM を作るだけならちょっとは簡単だったかもしれないけど、それではやる気が起こらないしなー。

あと一日しかないのに、全然だめだ。。。