Let's write β

プログラミング中にできたことか、思ったこととか

勘違いしてた。

どうやって部分テンプレートみたいなのつくってそれを連鎖させれば良いんだろうとかいってたけど、普通にできた。勘違いしてた

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