Petite aide ici s'il vous plait. J'essaie de créer cette macro Lisp qui prend une liste (de nombres) en entrée et retourne la somme de ces nombres. Le codeMacro Lisp basique Question
(setf g (list 1 2 3 4))
(defmacro add-test(var)
`(+ ,@var))
(ajouter test g) donne cette erreur
***** La valeur G est pas de type LIST. [Condition de type TYPE-ERREUR] *****
En même temps (add-test (1 2 3 4)) donne le résultat correct qui est 10.
Pouvez-vous s'il vous plaît expliquer, pourquoi ne fonctionne-t-il pas quand la variable est transmise à la fonction?
Autres détails -
Lispbox - SBCL
Ubuntu Linux
Merci à l'avance
Merci Rainer pour la réponse détaillée. Cela a beaucoup aidé. – bdev
Par curiosité, disons que nous prenons l'idée de bdev plus loin. Supposons que j'ai une sorte d'expression optimisable (une liste d'entiers!), Et je veux optimiser l'expression avant "run-time". Comment ferais-je cela? (bien que je suppose que (eval G) pourrait fonctionner ...). –
@Paul Nathan: vous pouvez l'ÉVALUER, le COMPILER, le FONCER, l'APPLIQUER - il n'y a presque pas de limites. Voir aussi DEFINE-COMPILER-MACRO, qui vous permet d'écrire des optimisations. –