改良版 与えられた木から、子→親への対応を作る

前回の記事(id:SaitoAtsushi:20080602:1212419400)で書いたコードがイマイチだったので、効率化してみた。

(define (tree->alist tree)
  (let loop ((tree tree)
             (t '()))
    (let ((a (car tree)))
      (fold (lambda(e r)
              (loop e (cons (cons (car e) a) r)))
            t
            (cdr tree)))))

正確には計ってないけれどだいたい40分くらいかかったと思う。修行が足りない。
Document ID: 3d5c5ca2c6af0507577d6a46ed923ab3