# defmacro
[[macroexpand]] 일어나는 과정을 확인하는 데 도움이 되는 도구
(defmacro if-not [condition expression]
(list 'if condition nil expression))
(defmacro if-not
([condition expression]
(list 'if condition nil expression))
([condition expression2 expression3]
(list 'if condition expression3 expression)))
### when
(defmacro when (1)
"Evaluates test. If logical true, evaluates body in an implicit do."
{:added "1.0"} (2)
[test & body] (3)
(list 'if test (cons 'do body))) (4)
1. [[defmacro]]를 사용하여 [[when]]이라는 [[매크로]]를 만든다
2. 언어의 어느 버전에 추가되었는지를 나타내는 맵이다
3. 논리적 검사식을 [[test]] 인수로 받고 식의 본문을 나머지 인수들인 [[body]]로 받았다
4. 이것은 [[if]] 문 안에 test 인수를 넣고 body 인수를 [[do]]로 감싼다. 여기서 do는 출력과 같은 [[부수 효과]]를 내는 식을 평가한다.