我想定义一个接受&rest
参数的函数,并将它们委托给另一个函数。
(html "blah" "foo" baz) => "<html>blahfoobaz</html>"
我找不到比这更好的方法:
(defun html (&rest values)
(concatenate 'string
"<html>"
(reduce #'(lambda (a b)
(concatenate 'string a b))
values :initial-value "")
"</html>"))
但这对我来说看起来有点怪异,因为第4行只不过是连接&amp; rest参数“值”。我试过(concatenate 'string "<html>" (values-list values) "</html>")
,但这似乎不起作用(SBCL)。有人可以给我一个建议吗?
亲切的问候
答案 0 :(得分:3)
(defun html (&rest values)
(apply #'concatenate 'string values))
答案 1 :(得分:3)
原则上,除非你使用format
,否则它不会好得多,但你可以使用CL-WHO库,它允许你用Lisp编写HTML:
(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")))))
编辑:也许应该显示format
方式:
(defun html (&rest values) (format nil "<html>~{~a~}</html>" values))