Common lisp 处理,;公共lisp中的rest参数

Common lisp 处理,;公共lisp中的rest参数,common-lisp,Common Lisp,我想定义一个接受&rest参数并将其委托给另一个函数的函数 (html "blah" "foo" baz) => "<html>blahfoobaz</html>" (html“blah”“foo”baz)=>“blahfoobaz” 我没有找到比这更好的方法: (defun html (&rest values) (concatenate 'string "<html>"

我想定义一个接受
&rest
参数并将其委托给另一个函数的函数

(html "blah" "foo" baz) => "<html>blahfoobaz</html>"
(html“blah”“foo”baz)=>“blahfoobaz”
我没有找到比这更好的方法:

(defun html (&rest values)
  (concatenate 'string 
               "<html>" 
               (reduce #'(lambda (a b)
                           (concatenate 'string a b))
                       values :initial-value "") 
               "</html>"))
(定义html(&rest值)
(连接“字符串”
"" 
(减少#’)(λ(a b)
(连接“字符串a和b”)
值:初始值“”)
""))
但这在我看来有点令人沮丧,因为第4行只不过是连接了&rest参数“值”。我尝试了
(连接“string”“(值列表值)”)
,但这似乎不起作用(SBCL)。有人能给我一个建议吗


原则上,它不会变得更好,除非您使用,但您可以使用库,它允许您使用Lisp编写HTML:

(defun html (&rest values) 
  (apply #'concatenate 'string values))
(defun hello-page () (with-html-output-to-string (string) (:html (:head (:title "Hello, world!")) (:body (:h3 "Hello, World!") (:a :href "http://weitz.de/cl-who/" "The CL-WHO library")))))
请注意,在我给出这个答案后,问题发生了变化。 (defun html (&rest values) (format nil "<html>~{~a~}</html>" values))