cl-who: использование переменной в with-html-output-to-string

Все примеры, которые я видел до сих пор для cl-who, работают следующим образом:

(with-html-output-to-string (s)
   (:HTML (:HEAD (:TITLE "hello")) (:BODY (:DIV "world"))))

Который отлично работает. Однако я хотел использовать with-html-output-to-string с переменной вместо жестко закодированного html-дерева; если у *p* есть (:HTML (:HEAD (:TITLE "hello")) (:BODY (:DIV "world"))) и я делаю это

(with-html-output-to-string (s)
   *p*)

В результате получаю "". Я предполагаю, что, поскольку with-html-output-to-string является макросом, его последний аргумент никогда не оценивается. Есть ли способ обойти это?


person fableal    schedule 10.06.2013    source источник
comment
Мне не удалось добавить тег cl-who (не существует, недостаточно повторений).   -  person fableal    schedule 10.06.2013
comment
Единственное, о чем я могу думать, это (eval `(with-html-output-to-string (s) ,*p*)). Не похоже, что существует реализация with-html-output-to-string как функции.   -  person juan.facorro    schedule 11.06.2013
comment
для этого есть специальная конструкция: str - см. weitz.de/cl-who/#example   -  person Vsevolod Dyomkin    schedule 11.06.2013
comment
@VsevolodDyomkin, который работал на меня; если вы хотите поместить это в ответ, я буду рад принять это.   -  person fableal    schedule 11.06.2013


Ответы (2)


Используйте 1_; посмотрите примеры на http://weitz.de/cl-who/#example.

Если вы сделаете:

(with-html-output-to-string (s)
   (str *p*))

вы получите ожидаемый результат.

person fableal    schedule 14.06.2013

Передача частичных html-деревьев в виде форм lisp не является ожидаемым способом в cl-who, но вы можете использовать некоторые внутренние элементы cl-who (apply tree-to-commands) для написания небольшой оболочки.

person Svante    schedule 11.06.2013
comment
Я обнаружил, что использование cl-who:str соответствует моим потребностям. Спасибо, в любом случае. - person fableal; 15.06.2013