next up previous
Next: 7 関数呼び出し部のコンパイル Up: 6 マクロのコンパイル Previous: 6.2 let マクロ

6.3 define マクロ

シンボルや,関数を定義する 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日