2017-12-19 8 views
0
(defmacro foo (x) 
    `(defun ,xt() 
     (format t "hullo"))) 

(foo bar) 

eine Funktion bart nicht definieren, da ,xt als Variable xt gelesen wird, anstatt die Variable x plus ein t. Aber gibt es eine Möglichkeit, eine Funktion bart zu erhalten, indem Sie das Argument bar liefern?Common Lisp Makro variable Expansion

Antwort

3

Sie müssen die Funktionsnamen erstellen (das ist eine Zeichenfolge dann) und dann in ein umzuwandeln, zum Beispiel:

(defmacro foo (x) 
    `(defun ,(intern (format nil "~aT" x))() 
    (format t "hullo"))) 

dann

? (foo bar) 
BART 
? (bart) 
hullo 
NIL