MEMO: 遅延評価と可変長引数

可変長の引数を渡されたとき、結果は

( (lambda (t . x) x) 1 2 3)
⇒ (2 3)
(let ( (y 2) ) ( (lambda (t . x) x) 1 y 3) )
⇒ (2 3)

にしたいんだけど*1、遅延評価を thunk 方式にすると、2個目の式は実質的に

(let ( (y 2) ) ( (lambda (t . x) x) (lambda () 1) (lambda () '(y 3) ) ) )
⇒ (y 3)
(let ( (y 2) ) ( (lambda (t . x) x) (lambda () 1) (lambda () y) (lambda () 3) ) ) )
⇒ (# #)

のどっちかになるんだけど*2、コレは結果が異なるんで宜しくない。
かといって '(y 3) のクォートを外すのも評価されちゃうんで宜しくない。


どうすれば良いんだろうか。


 

*1:gauche scheme の実装がコレだから

*2:x 展開時に thaw れば