扩展Common Lisp中的& rest参数

时间:2011-02-25 22:38:57

标签: lisp common-lisp

假设我厌倦了一直写“格式t ...”,并且想要少点击键。

所以我写这个:

(defun puts (fstring &rest vars)
  (format t fstring vars))

(puts "~a ~a" 1 2)

;; error message results, because vars became (1 2)

现在,vars已被转换为我传入的任何参数列表。它需要“扩展”为值列表。

解决此问题的典型解决方案是什么?

2 个答案:

答案 0 :(得分:11)

您可以使用apply(apply #'format t fstring vars)vars扩展为format的单独参数。

答案 1 :(得分:2)

apply之外,还可以使用宏来执行此操作,您可以使用,@拼接反引号内的列表:

(defmacro puts (fstring &rest vars)
  `(format t ,fstring ,@vars))