SICPを読む(76) 二進木をGraphvizで表示

どうも二進木のリスト表示がわかりにくいので、Graphviz使うことに。

define (graph tree)
  (system
    (format
      "echo 'digraph G { ~a ~a }' | dot -Tpng | display"
      (entry tree) ; 一個だけだと表示が出来ないのでとりあえず最初のを挿入しとく
      (letrec
        ((make-node
           (lambda (current next)
             (if (null? next)
                 ""
                 (format "~a->~a " (entry current) (entry next)))))
         (iter
           (lambda (tree)
             (if (null? tree)
                 ""
                 (string-append
                         (make-node tree (left-branch tree))
                         (make-node tree (right-branch tree))
                         (iter (left-branch tree))
                         (iter (right-branch tree)))))))
        (iter tree)))))

(graph (list->tree '(1 2 3 4 5 6)))
; (3 (1 () (2 () ())) (5 (4 () ()) (6 () ())))

適当っす。先読みはムジィ。


えいやぁ〜。

スゲー見やすい。


もう一枚。

可視化って素晴らしい。


再帰は爆発だ(岡本太郎風)