Next: 7 関数呼び出し部のコンパイル
Up: 6 マクロのコンパイル
Previous: 6.2 let マクロ
シンボルや,関数を定義する
defineもマクロです.
<cl> (scheme-macro-expand
'(define (test a) (list a)))
(NAME! (SET! TEST (LAMBDA (A) (LIST A))) 'TEST)
ここでは,name!という
関数を作ってそれを使うマクロとして
定義することを考えます.
<cl> (comp-show '(define a 10))
ARGS 0
CONST 10
GSET A
CONST A
GVAR NAME!
CALL 2
RETURN
NIL
<cl> (comp-show '(define (a x) (* x 10)))
ARGS 0
FN
ARGS 1
LVAR 0 0 ; X
CONST 10
GVAR *
CALL 2
RETURN
GSET A
CONST A
GVAR NAME!
CALL 2
RETURN
NIL
<cl> (comp-show '(define (test a) (list a)))
ARGS 0
FN
ARGS 1
LVAR 0 0 ; A
GVAR LIST
CALL 1
RETURN
GSET TEST
CONST TEST
GVAR NAME!
CALL 2
RETURN
という形のコードを生成します.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日