EoPL reading (60) 2.2 An Abstraction for Inductive Data Type

On Lisp の日本語訳の最初らへんを見ててやっぱ直そ、と思い修正検討着手。
こんなになった。

(add-load-path ".")
(load "define-datatype")
(load "bintree")
(load "leaf-sum")

(define max-interior
  (lambda (tree)
    (define (max-interior-inner rslt t)
      (let ((x (leaf-sum t)))
	(cases bintree t
	       (interior-node 
		(key left right)
		(let ((rettmp (if (or (> x (cadr rslt))
				      (not (car rslt)))
				  (list key x)
				  rslt))
		      (end (and (eq? 'leaf-node (car left))
				(eq? 'leaf-node (car right)))))
		  (let ((ret (if (eq? 'leaf-node (car left))
				 rettmp
				 (max-interior-inner rettmp left))))
		    (if end
			rettmp
			(max-interior-inner ret right)))))
	       (else rslt)))
      )
    (car (max-interior-inner '(#f 0) tree))
    )
  )

一応試験にはパスしてますがまだ微妙。ドリカムも終わったので寝ます。