私は、Scheme と関数型言語全般についてまったくの初心者です。二分探索木を作成しようとしています。ノードの形式は 3 つの要素のリストです。1 つ目はノードの値、2 つ目は左側の子ノード、3 つ目は右側の子ノードです。空のツリー ( () () () ) を作成する「make」関数があります。挿入機能もあります。コードは次のとおりです。
;Inserts a number into the tree
(define (insert t x)
(cond ((null? (car t))
(list x (make) (make)))
((< x (car t))
((list (car t) ((insert (cadr t) x)) (caddr t))))
((> x (car t))
((list (car t) (cadr t) ((insert (caddr t) x)) )))
)
)
;Makes a new empty tree
(define (make)
(list (list) (list) (list))
)
テストするために、次の行を実行します。
> (define b1 (make))
> (define b2 (insert b1 1))
> b2
(1 (() () ()) (() () ()))
> (define b3 (insert b2 2))
次に、次のエラーが表示されます。
application: not a procedure;
expected a procedure that can be applied to arguments
given: (2 (() () ()) (() () ()))
arguments...: [none]
かっこを確認して再確認しました...そしてデバッグモードで実行すると、ツリーに2を挿入する最後に失敗することがわかります。までは、計画通りに機能します。これは私の愚かな構文/論理エラーの原因ですか?