假设我厌倦了一直写“格式t ...”,并且想要少点击键。
所以我写这个:
(defun puts (fstring &rest vars)
(format t fstring vars))
(puts "~a ~a" 1 2)
;; error message results, because vars became (1 2)
现在,vars
已被转换为我传入的任何参数列表。它需要“扩展”为值列表。
解决此问题的典型解决方案是什么?
答案 0 :(得分:11)
您可以使用apply
:(apply #'format t fstring vars)
将vars
扩展为format
的单独参数。
答案 1 :(得分:2)
除apply
之外,还可以使用宏来执行此操作,您可以使用,@
拼接反引号内的列表:
(defmacro puts (fstring &rest vars)
`(format t ,fstring ,@vars))