2009-07-25 5 views
8

Je pratiquais l'écriture de macros et je n'arrive pas à obtenir defn pour fonctionner.Comment écrire une macro "defn" dans Clojure?

Ma syntaxe est: (my-define name parameter body)

Ignorant (corps fn [paramètre]) & paramètres et routines récursives, Comment puis-je lier le nom à un?

+1

Vous pouvez utiliser 'macroexpand' voir dans le rempl quelle macro s'étend à. Par exemple. '(macroexpand '(defn foo [] 1))'. Ceci est utile à la fois pour le débogage de vos propres macros et pour l'apprentissage des macros clojure/core. – liwp

+0

Peut également utiliser '(source defn)' pour inspecter directement le code source. – dqc

Répondre

18

Vous devez transformer

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

à

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

Ceci est assez simple en fait:

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

Cela ne facilite pas les fonctions avec plusieurs formes dans le corps, ni docstrings. – acron

+0

Pour plusieurs formulaires, utilisez l'opérateur d'épissure (@) -> ~ @ body – MrOerni

Questions connexes