Common lisp 修复倒霉的宏

Common lisp 修复倒霉的宏,common-lisp,Common Lisp,经过一些尝试和错误,我成功地编写了一个宏mashup,以打印几个变量的名称和值(用于调试)。这似乎很有效,但我想看看如何更专业地编写代码 调用(prt A B C)然后打印当前绑定——例如: 很好的雨衣——但尝试了一些小的修改,但就是不起作用!?(defmacro-prt(&rest-vars)“打印变量的值。”(progn(格式t“~%”)、@(vars-collect中的变量循环(prt1,var))(finish-output t)t))忽略空间输出的额外~%,finish-output不

经过一些尝试和错误,我成功地编写了一个宏mashup,以打印几个变量的名称和值(用于调试)。这似乎很有效,但我想看看如何更专业地编写代码

调用
(prt A B C)
然后打印当前绑定——例如:

很好的雨衣——但尝试了一些小的修改,但就是不起作用!?(defmacro-prt(&rest-vars)“打印变量的值。”
(progn(格式t“~%”)、@(vars-collect中的变量循环(prt1,var))(finish-output t)t))忽略空间输出的额外~%,finish-output不忽略。唯一起作用的变化是返回t!(我在SBCL上。)不错的雷纳——但尝试了一些小的修改,但就是不起作用!?(defmacro-prt(&rest-vars)“打印变量的值。”
(progn(格式t“~%”)、@(vars-collect中的变量循环(prt1,var))(finish-output t)t))忽略空间输出的额外~%,finish-output不忽略。唯一起作用的变化是返回t!(我在SBCL上。)
(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
(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))))