매크로 만들기

(defmacro def-hi-queen [name phrase] ; (1)
  (list 'defn ; (2)
    (symbol name) ; (3)
    [] ; (4)
    (list 'hi-queen phrase))) ; (5)

  1. def-hi-queen이라는 이름의 매크로를 만드는 데 함수의 심볼 이름과 소개 문자열의 두 개의 인수를 받는다.
  2. 코드가 데이터이기 때문에 반환하는 데이터는 코드의 리스트이다. 코드 리스트의 첫 요소는 defn 심볼이다 인용 기호를 심볼 앞에 붙여서 매크로 안에서 평가되지 않도록 하는데, 단지 심볼 그 자체를 반환하기 위해서이다
  3. name 인수로 심볼을 만든다.
  4. defn의 인수를 위한 벡터이다
  5. 인용 기호가 붙은 hi-queen 함수와 소개 문자열 phrase로 된 리스트를 반환한다. 매크로 안에서 평가되지 않고 코드 자체로 반환되기를 원하기 때문에 인용 기호를 붙였다.

(macroexpand-1 '(def-hi-queen alice-hi-queen "My name is Alice"))
;=> (defn alice-hi-queen []
      (hi-queen "My name is Alice"))

함수를 만들가 호출

(def-hi-queen alice-hi-queen "My name is Alice")
;=> #'user/alice-hi-queen
 
(alice-hi-queen)
;=> "My name is Alice, so please your Majesty."


  • open/매크로-만들기.txt
  • 마지막으로 수정됨: 2022/02/17 02:33
  • 저자 127.0.0.1