Tuesday, March 19, 2013

Land of Lisp とか Common Lisp とか Python とか...


巷では "Land of Lisp: Learn to Program in Lisp, One Game at a Time!" が話題(?)だが、お小遣い制なので本もなかなかなかなか買えない私だったりする。

ところで、この本に出てくるさまざまなゲームのコードは著者のサイト

http://landoflisp.com/source.html

から入手できるようになっているので、scheme 実装の一つである Gauche に移植してみた…なんていう人もいる。

http://practical-scheme.net/wiliki/wiliki.cgi?l=jp&p=Gauche%3aLandOfLisp
http://blog.practical-scheme.net/shiro/20130223-land-of-gauche

スゲー...

私も、特に evolution.lisp に心惹かれてしまっていたのだが、Lisp はいまいち 土地勘がないのと、事情により Python力(ちから)を上げないといけなかったりするので、「それじゃあ、Common Lisp のソースを解読しつつ、Python に移植してみるか?」と、くだらないことを思いついてしまったのだった...
実際やりはじめたのは、March 8, 2013 くらいだったらしい...(たぶん)

そして、できあがったのがこれ↓である。

https://github.com/thatsdone/junkbox/blob/ed2c157524f6b0d058fe5b2a9286342faf1c0e5c/python/evolution.py

HEADはこっち↓
https://github.com/thatsdone/junkbox/blob/master/python/evolution.py


現状は、無限ループをつくるのに末尾再帰を使っているところまで Lisp のコードそのまんまなのだが、一応、readline を使って prompt まわりをマシにしてみたりとか、animals と plants のダンプを表示するコマンドくらいは追加してみた。進化させてみると、それっぽく動いている(ようだ)。
暇をみて、もうちょっと Python らしくする予定。

やってみての感想は、

  • Common Lisp (だけじゃないんだろうな、たぶん)って、なんか面白い :)
  • 意外に global variables を多用するのね
  • 竹内先生のあの本をちょっとかじっていたからこそ読めたのかなぁ...

云々とか、そんな感じ。
Lisp の黒魔術をかいま見るまでは、まだまだ遠い(笑)

余談だが、OpenStack Advent Calendar のこんな記事(by @irix_jp さん)とかこんな記事(by @saito_hideki さん)とかの凄腕な人たちのネタに触発されているというのはヒミツw

しかし、Land of Lisp ほしいなぁ…(fade out)

No comments:

Post a Comment