# 매크로 만들기 {{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."