(defun comp-begin (exps env) (cond ((null exps) (gen 'CONST nil)) ((null (cdr exps)) (comp (car exps) env)) (t (seq (comp (car exps) env) (gen 'POP) (comp-begin (cdr exps) env))))) (defun seq (&rest code) (apply #'append code))beginの中に何もなければ計算結果としてnil を返すために,constでnilをスタックにつむようにします. begin手続きの最後の式がこの手続きの値になり, それだけがスタックにつまれるというコードになります.
<cl> (comp-show '(begin)) ARGS 0 CONST NIL RETURN <cl> (comp-show '(begin a)) ARGS 0 GVAR A RETURN <cl> (comp-show '(begin a b c)) ARGS 0 GVAR A POP GVAR B POP GVAR C RETURN <cl> (comp-show '(begin (a 1) (b 2))) ARGS 0 CONST 1 GVAR A CALL 1 POP CONST 2 GVAR B CALL 1 RETURN