J'essaie de créer une fonction pour créer une nouvelle base avec une autre structure comme base, et j'ai essayé de créer une macro qui créerait une nouvelle structure avec les mêmes champs que l'ancien. La macro j'ai ce que je pensais devrait em> le cas échéant est ci-dessous, mais cela donne l'erreur suivante: macro: p> Exemple d'utilisation: P> {:data 3 :left nil :right nil}
3 Réponses :
Voici une version fixe:
(defn prototype [structure obj] obj)
Le lien Seth posté comme un commentaire à votre question contient la réponse (le coupable est la manière dont les arguments aux fonctions anonymes sont traités); Ce qui suit, en utilisant un argument de gensym, devrait fonctionner:
(defmacro prototype [structure obj] `(apply struct ~structure (map (fn [x#] (~obj x#)) (keys ~obj))))
Vous ne devriez pas utiliser pas que le formulaire # () code> à l'intérieur d'une macro. fn * code> a un espace de noms- Symbole qualifié dans sa liste de paramètres. C'est l'erreur que vous obtenez. Vous devez éviter ce type de syntaxe spéciale de lecteur dans les macros et utiliser les formes longues à la place. P> p>
Je suis nouveau à Clojure mais j'ai trouvé ce lien: OSDIR. com / ml / java.clojure.user / 2008-03 / msg00108.html
Pourriez-vous ajouter la sortie souhaitée à l'exemple d'utilisation