LIST_STAR
む。こんな命令があったのか。
例えばこんなカンジ、との事。
gosh> (list 1) (1) gosh> (list* 1) 1 gosh> (list 1 2) (1 2) gosh> (list* 1 2) (1 . 2) gosh> (list 1 2 3) (1 2 3) gosh> (list* 1 2 3) (1 2 . 3) gosh>
ななななんだこれは。インストラクションを評価するコードを見てみるにこんなカンジ
CASE(SCM_VM_LIST) { int nargs = SCM_VM_INSN_ARG(code); ScmObj cp = SCM_NIL; if (nargs > 0) { ScmObj arg; cp = Scm_Cons(VAL0, cp); while (--nargs > 0) { POP_ARG(arg); cp = Scm_Cons(arg, cp); } } VAL0 = cp; NEXT1; } CASE(SCM_VM_LIST_STAR) { int nargs = SCM_VM_INSN_ARG(code); ScmObj cp = SCM_NIL; if (nargs > 0) { ScmObj arg; cp = VAL0; while (--nargs > 0) { POP_ARG(arg); cp = Scm_Cons(arg, cp); } } VAL0 = cp; NEXT1; }
リバース的ですが val0 レジスタには末端の引数が入っていそげ。push でナニされてるのだとすると引数を先頭から push していって末端が val0 に、なカンジに見えますな。
しかし再度の_文句無し_は微妙かも (何