kiyokaのブログアーカイブ

Archive of old blog posts

quasiquoteが動いた日

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

ついに、ついに、quasiquoteが動いた! (※quasiquoteは、ほとんどのLisp系言語がサポートしています。リスト内包表現に代表されるリストの部分展開をサポートする機能で、 ` , ,@ の3つの記号を使います) もうすぐ動くかも、という日々が何日も続いていたので、この上ない達成感がある。 img Toy言語とはいえ、ちゃんと遊べる様にするためにはちゃんと実装しておかないとね。

これが、現段階での quasiquoteの実行結果。

nendo> `(1 2 3)
(1 2 3)
nendo> (set! a 3)
3
nendo> `(1 2 ,a)
(1 2 3)
nendo> `(1 2 ,@(list a))
(1 2 3)
nendo> `(1 ,@(list 2 a))
(1 2 3)
nendo> (set! a 11)
11
nendo> `,a
11
nendo> ``,a
`,a

R6RSのスペック R6RS:翻訳:R6RS:11.17 Quasiquotation に書いてあるサンプルも一応動いている。

nendo> `(list ,(+ 1 2) 4)
(list 3 4)
nendo> (let ((name 'a)) `(list ,name ',name))
(list a 'a)
nendo> `(a `(b ,(+ 1 2) ,(foo ,(+ 1 3) d) e) f)
(a `(b ,(+ 1 2) ,(foo 4 d) e) f)

これからRubyとの連携にも手をつけて、どこかでプレゼンできるようなネタを仕込んでいこう。 育児中の身なので Shibuya.lisp テクニカルトーク#3 には行けなかったけど、今度は何とか都合をつけてイベントに出かけて発表したい。