二分木をたどる関数の作成に問題があります。この関数は search_term とリストを受け取り、true または false を返します。これが私が持っているもので、Schemeでバイナリ検索を実装する方法をグーグルで見つけたのと本質的に同じです。
(define (tree-lookup val tree)
(if (empty-tree? tree)
#f
(let ((curr-val (node-value tree))
(left (node-left tree))
(right (node-right tree)))
(cond ((equal? val curr-val) #t)
((< val curr-val))
(tree-lookup val left)
(else
(tree-lookup val right))))))
(define tree-test '(((1 2) 3)(4 (5 6)) 7 (8 9 10))) ; Test tree
問題は、「val」変数をノードと比較しようとしたときに発生します。これは、(< 2 '((1 2) 3)) のように、実数をリストと比較していることを意味します。アトム値のみをテストしようとしましたが、葉に到達したときにツリーを元に戻す方法に行き詰まっています。
エラーメッセージは次のとおりです。
<: contract violation
expected: real?
given: '{{1 2} 3}
argument position: 2nd
other arguments...:
8