apply

applyのところを読んでいて、「あれ? じゃあlambdaと引数リストをくっつけたもの作って evalしても等価?」と思ってしまい

(define (append/log* . args)
  (print "args=" args)
  (eval #?=(cons 'append args) (null-environment 5)))

とかしてしまう.

gosh> (append/log* '(x y) '(z bang) )
args=((x y) (z bang))
#?="(stdin)":27:(cons 'append args)
#?-    (append (x y) (z bang))
*** ERROR: unbound variable: y
Stack Trace:
_______________________________________
  0  (x y)
        At line 81 of "(stdin)"

そりゃそうだ。sub-expも全て評価されてしまうのね。まだまだlisp慣れできない。
てかどうすりゃいいんだろう。悩もう。