2016-11-01 3 views
0

いくつかの試行の末、&エラーが発生したため、マクロのマッシュアップをコーディングして、&という値をいくつかの変数(デバッグ用)の値として出力しました。それはうまくいくようですが、これを「専門的に」コードする方法を見たいと思いますか?例えば ​​- (prt A B C)を呼び出す不都合なマクロの修復

(defmacro prt1 (var) 
    ;Print a single variable and its value. 
    `(progn (princ (symbol-name ',var)) (princ " = ") (princ ,var) (terpri))) 

(defmacro prt (&rest vars) 
    ;Print the values of a number of variable names. 
    (eval `(append (list 'progn) 
       (map 'list #'(lambda (x) (list 'prt1 x)) ',vars) 
       (list (list 'terpri)) 
       (list t)))) ;need to return t 

は、現在のバインディング印刷します:

A = 1 
B = 2 
C = 3 
T 

答えて

5
(defmacro prt1 (var) 
    "Print a single variable and its value." 
    `(format t "~a = ~a~%" ',var ,var)) 

(defmacro prt (&rest vars) 
    "Print the values of variables." 
    `(progn ,@(loop for var in vars collect `(prt1 ,var)))) 
+0

ニースライナーを - しかし、うまく動作しませんいくつかのマイナーな修正を試してみました! (defmacroのPRT(&VARSを休ま) "変数の値を出力します。" '(のprogn(フォーマットT "〜%") 、@(VARSにおけるVARのためのループが収集'(PRT1、VAR)) (仕上げ-output t) t)) Extra〜%空間出力は無視され、finish-outputは出力されません。仕事をする唯一の変化はtを返すことです! (私はSBCLにいる) – davypough

関連する問題