ツリー マップ関数の 90% をスキームで記述しましたが、大きな問題が発生して困っています。コードをバイナリ ツリーでテストすると、最初のノード以外はすべて適切にマップされます。最初のノードが脱落し、これを回避する方法が思いつかないようです。ここでアドバイスをいただければ幸いです。
(define (value tree)
(car tree))
(define (left tree)
(car (cdr tree)))
(define (right tree)
(car (cdr (cdr tree))))
(define (tree-map f T)
(cond ((null? T) '())
((and (null? (right T))(null? (left T))) '())
((and (null? (right T))(not (null? (left T))))
(make-tree (f (value(left T)))
(tree-map f (left T))
(right T)))
((and (null? (left T))(not (null? (right T))))
(make-tree (f (value(right T)))
(left T)
(tree-map f (right T))
))))