どうやって部分テンプレートみたいなのつくってそれを連鎖させれば良いんだろうとかいってたけど、普通にできた。勘違いしてた
(ql:quickload :cl-markup) (defmacro defpartial (name args &body body) `(defun ,name ,args (markup:markup ,@body))) (defpartial todo-item (id title due) (:li :id id (:h3 title) (:p due))) (defpartial todo-list (todo-list) (:ul (mapcar (lambda (todo) (todo-item (car todo) (cadr todo) (caddr todo))) todo-list)))
こんな感じ
CL-USER(3): (todo-item 3 "hoge" "moge") "<li id=\"3\"><h3>hoge</h3><p>moge</p></li>" CL-USER(4): (todo-list '((3 "moge" "fuge") (4 "hage" "hige"))) "<ul><li id=\"3\"><h3>moge</h3><p>fuge</p></li><li id=\"4\"><h3>hage</h3><p>hige</p></li></ul>"