いまいち理解しきれてない。使いどころが分からん。
例えば、
(define MIT->primitive (lambda (expr) (match expr (('define (func . args) . body) (list 'define func (list* 'lambda args body))))))
のmatchのパターンのところが、なぜ
('define (func args) body)
じゃなくて
('define (func . args) . body)
なのか。
あと、それに付随するのかもしれんが、なんで
(list 'lambda args body)
じゃなくて
(list* 'lambda args body)
なのか。
実際に動かしてみると違った結果が得られるから違うのは分かる。
だけど、なぜ違うのかという根拠を整理できていない。
つまり分かってないってことじゃんかーーー。くそー。
さらには、
'(foo bar baz)
と
'(foo bar . baz)
の違いが分からん。
これが根本的な原因?