見つけた
昼休みの昼寝前にちょっと時間があったので試してみた。
ええと、LREF をカンニングしつつ以下。
gosh> (disasm (lambda (a b c d e f) (lambda (x y z) (a x)))) main_code (name=#f, code=0x80d68a0, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x y z) (a x)) 2 RET internal_closure_0 (name=#f, code=0x80d68b0, size=4, const=0 stack=4): args: #f 0 LREF2-PUSH ; x 1 LREF(1,5) ; a 2 TAIL-CALL(1) ; (a x) 3 RET #<undef> gosh>
惜しい。逆だったらイケそう
gosh> (disasm (lambda (a b c d e f) (lambda (x y z) (x a)))) main_code (name=#f, code=0x81f1cd0, size=3, const=1, stack=0): args: #f 0 CLOSURE #<lambda 0> ; (lambda (x y z) (x a)) 2 RET internal_closure_0 (name=#f, code=0x81f1ce0, size=4, const=0 stack=4): args: #f 0 LREF-PUSH(1,5) ; a 1 LREF2 ; x 2 TAIL-CALL(1) ; (x a) 3 RET #<undef> gosh>
出た。がしかし何故にこうなるのか、は未だ謎。(を