Строки, не отображаемые в шаблоне CL-WHO

(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>

Кто-нибудь может сказать мне, почему? Я использую СБКЛ.


person itea    schedule 27.03.2013    source источник
comment
Хорошим первым началом, вероятно, будет сделать (macroexpand-1 '(rawpage () (:div (str+ "hello," "name")))) и посмотреть, во что он на самом деле расширяется. Во-вторых, МОЖЕТ быть лучше заменить ваш макрос str+ на (defun str+ (&rest strs) (format nil "~{~a~}" strs) (никогда не используйте макрос, если функция поможет).   -  person Vatine    schedule 27.03.2013


Ответы (1)


Ваша проблема в том, что в CL-WHO неконстантные строки должны помещаться внутри str вот так:

(defmacro rawpage ()
  (:div (str (str+ "hello," "name"))))
person Vsevolod Dyomkin    schedule 27.03.2013