text.html-liteについて

(use srfi-1)
(use text.tree)
(use text.html-lite)
(write-tree
 (html:dl
  (map (lambda (m)
         (html:dt #`",m")
         (html:dd "nnnnn"))
       (iota 10 1))))

という感じで

<dl>
<dt>1</dt>
<dd>nnnnn</dd>
<dt>2</dt>
<dd>nnnnn</dd>
...
<dt>10</dt>
<dd>nnnnn</dd>
</dl>

というhtmlを生成しようと思ったのだが,

<dl>
<dd>nnnnn</dd>
<dd>nnnnn</dd>
...
<dd>nnnnn</dd>
</dl>

となる.
関数が二つあるので後ろのhtml:ddが評価されてnnnnの方だけが生成されるぽい. ならばと思って

(use srfi-1)
(use text.tree)
(use text.html-lite)
(write-tree
 (html:dl
  (map (lambda (m)
         (begin
           (html:dt #`",m")
           (html:dd "nnnnn")))
       (iota 10 1))))

とやっても変わらない. ddの方だけが出力される.

(use srfi-1)
(use text.tree)
(use text.html-lite)
(begin
  (display "<dl>")
  (map (lambda (m)
         (begin
           (write-tree (html:dt #`",m"))
           (write-tree (html:dd "nnnnn"))))
       (iota 10 1))
  (display "</dl>"))

とすると上手くいくのだが, 何か納得がいかない.

あ, 理解した.

Method: write-tree ((tree <list>) out)
Method: write-tree ((tree <top>) out)
write-treeの既定の動作です。treeがリストなら、その要素それぞれについてwrite-treeを呼び出します。それ以外のオブジェクトに関しては displayを呼んで出力します。

(write-tree
 (html:dl
  (map (lambda (m)
         (list
          (html:dt #`",m")
          (html:dd "nnnnn")))
       (iota 10 1))))

木構造にせなあかんのか.