ツリー内のアイテムを検索するコードは、ツリーの定義によって異なります。特に、サブツリーで構成されるツリーを定義する場合、それはツリーでどのように再帰するかを示します。そのため、「tree」と「leaf」の定義から始める必要があります。
これが完全な解決策であり、二分木を想定していません。
(define (make-tree item children)
`(TREE ,item ,children))
(define (tree? thing)
(and (list? thing)
(= 3 (length thing))
(eq? 'TREE (car thing))))
(define tree-item cadr)
(define tree-children caddr)
(define (make-leaf item)
(make-tree item '()))
(define (leaf? tree)
(and (tree? tree) (null? (tree-children tree)))
(define (leaf-member? tester item tree)
(and (tree? tree)
(or (and (leaf? tree) (tester item (tree-item tree)))
(let looking ((subtrees (tree-children tree)))
(and (not (null? subtree))
(or (leaf-member? equal item (car subtrees))
(looking (cdr subtrees)))))))