Scheme でやりたいこと
Scheme は予約語がなかったり構文拡張ができたりするので、自分で言語をデザインできるのが魅力だ。
やりたいことをまとめておこう。
ジェネリック関数
length、string-length、vector-length を length に、write、write-char を write に統合。これはそんなに難しくないと思う。
構文拡張
Scheme は少ない基本構文を組み合わせてより複雑な構文を作成する、というポリシーを持っている。僕も C 言語の制御構文は if と goto の組み合わせですべて表現できるなと思った(要するにアセンブラだ)。
Scheme に for や while を持ち込むのは比較的簡単だと思うけど、僕は goto を持ち込みたい。継続でできるかな?
部分適用
初めて lambda を見たとき「これは Haskell で言うところの部分適用ができるのでは?」と思った。
(lambda (x y z) (+ x y z) 1 2 3)
これを
(define foo (lambda (x y z) (+ x y z))) (define bar (foo 1)) (bar 2 3)
という感じで、foo に引数をひとつだけ渡した状態の bar という関数を作成し、その関数に第二、第三引数を渡して評価するという具合だ。残念ながら上記コードは動作しない。
delay や継続を使えば実現できるかな?