2009-07-25 6 views
8

매크로를 쓰는 연습을하고 있는데 defn을 사용할 수없는 것 같습니다.Clojure에서 "defn"매크로를 작성하는 방법은 무엇입니까?

내 구문은 다음과 같습니다 (my-define name parameter body)

어떻게이 (FN [매개 변수] 몸)에 이름을 바인드 않는, & 매개 변수와 재귀 루틴을 무시?

+1

당신은 무엇 매크로 REPL에서 볼 수 macroexpand''사용할 수 있습니다 로 확장됩니다. 예 : '(매크로 확장자 '(defn foo [] 1))'. 이것은 자신의 매크로를 디버깅 할 때나 클로저/코어 매크로에서 배우려고 할 때 유용합니다. – liwp

+0

'(source defn)'을 사용하여 소스 코드를 직접 검사 할 수도 있습니다. – dqc

답변

18

이 실제로 매우 간단

(my-define <name> <args> <body>) 

(def <name> (fn <args> <body>)) 

로 변환해야합니다

(defmacro my-define [name args body] 
    `(def ~name (fn ~args ~body))) 
+2

이것은 본문에서 여러 형식의 함수 나 docstring을 용이하게하지 않습니다. – acron

+0

여러 양식의 경우 splice 연산자 (@) -> ~ @ body를 사용하십시오. – MrOerni

관련 문제