kiyoka.2009_06_24 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2009_06
5555555555555555555555555555555
5

[Nendo] 可変長引数のサポート

5

私がRubyで書いているLisp方言、 Nendoの開発状況続き。

5

 

5

lambdaとmacroの可変長引数のサポートができた。

5

これで、いろんなScheme処理系みたいに初期化ライブラリがガンガン書けるぜぃ。

5

 

5
 例えば、list関数同様の関数は次の様に定義できる。
5
nendo> (define mylist (lambda lst lst))
5
#<Proc:0x00063880@(stdin):1>
5
nendo> (mylist 'a 'b 'c)
5
(a b c)
5

 

5
 1個以上の可変長引数もこの通り
5
nendo> (define firstAndRest (lambda ( first . rest )  (list first rest)))
5
#<Proc:0x00050460@(stdin):9>
5
nendo> (firstAndRest 1 2)
5
(1 (2))
5
nendo> (firstAndRest 1 2 3)
5
(1 (2 3))
5

 

5

これが動くまでにいろんなバグが見つかってなかなか本題の or と and をmacroで書く所まで行けてない。

5

そんなわけで、思ったよりもLisp処理系を作るのは簡単ではないことが分かりつつあるのだが、書いてはリファクタリングを続けることで頭の中でLispというものがどんどん整理されて行く気がする。これが悟り体験のような気がしてウレシイ。

5

実際にコードを書いてみて冗長に感じたり、直感的に場合分けが大すぎると感じたりした場合は、だいたいリファクタリングしたらゴッソリと短いコードに置き換わる。

5

nendo.rbが1000行を超えては1000行に納まるという繰返し。

5

この感覚なんだろう。

5

ぷよぷよとかテトリスの連鎖する感じ?

5
 1-1211550382Aga9
5

もうそろそろRubyで書く部分は減ってきて Nendoで書く init.nnd の行数が増えて行くのだろう。

5

quasiquoteが動く日も近いのではないかな?

5

 

5

...comment disabled...