htmlの変換
を見ておもしろそうだったので、やってみました><。
していること
S式で表したhtmlを実際のhtmlに変換して出力する。
S式で表したhtml
(define gauche-page '(html (head (title "Gauche Web")) (body (h1 "Gauche Web Page") (table (tr (td 1) (td "lisp")) (tr (td 2) (td "scheme"))))))
コード
(use text.tree) ;; (define open-tag (lambda (s) (list "<" s ">"))) ;; (write-tree (open-tag "tr")) ;; -> <tr> (define (html->tree e) (let ((open-tag (lambda (s) (list "<" s ">"))) (close-tag (lambda (s) (list "</" s ">")))) (define (parse-html e) (cond ((null? e) '()) ((list? e) (let1 tag (car e) (list (open-tag tag) (map parse-html (cdr e)) (close-tag tag)))) (else e))) (parse-html e))) (write-tree (html->tree gauche-page))
元の記事では、直接表示してましたが、一度木を作成してからwrite-treeで出力してます。