(require :cl-who)
(defmacro rawpage ((&rest head) &body body)
`(cl-who:with-html-output-to-string (*standard-output* nil :prologue t)
(:html
(:head
(:meta :charset "utf-8")
,@head)
(:body
,@body))))
(defmacro str+ (&rest strs)
`(concatenate 'string ,@strs))
(rawpage () (:div (str+ "hello," "name")))
Этот кусок кода не выводит то, что я хочу. Я ожидал, что это выведет:
<html><head><meta charset='utf-8' /></head><body><div>hello,name</div></body></html>
Но выводит:
<html><head><meta charset='utf-8' /></head><body><div></div></body></html>
Кто-нибудь может сказать мне, почему? Я использую СБКЛ.
(macroexpand-1 '(rawpage () (:div (str+ "hello," "name"))))
и посмотреть, во что он на самом деле расширяется. Во-вторых, МОЖЕТ быть лучше заменить ваш макросstr+
на(defun str+ (&rest strs) (format nil "~{~a~}" strs)
(никогда не используйте макрос, если функция поможет). - person Vatine   schedule 27.03.2013