# 매크로 만들기
{{tag>macro defmacro hi queen name phrase symbol}}
(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
(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."