Common lisp 修复倒霉的宏
经过一些尝试和错误,我成功地编写了一个宏mashup,以打印几个变量的名称和值(用于调试)。这似乎很有效,但我想看看如何更专业地编写代码 调用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不
(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))))