修复倒霉的宏

时间:2016-11-01 18:53:14

标签: common-lisp

经过一番试验&错误,我已设法编写宏mashup来打印名称&几个变量的值(用于调试)。它似乎有效,但我想看看如何更“专业”地编码?

(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

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

A = 1
B = 2 
C = 3
T

1 个答案:

答案 0 :(得分: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))))