gpt4 book ai didi

方案二叉搜索树错误 (R5RS)

转载 作者:行者123 更新时间:2023-12-04 18:12:09 26 4
gpt4 key购买 nike

总的来说,我对 Scheme 和函数式语言完全陌生。我正在尝试创建一个二叉搜索树。节点的格式是三个元素的列表,第一个是节点的值,第二个是左子节点,第三个是右子节点。我有一个“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]

我已经检查并重新检查了我的括号......并在 Debug模式下运行它,我看到它在将 2 插入树的末尾失败。直到,它按计划工作。这是我愚蠢的语法/逻辑错误的原因吗?

最佳答案

((list (car t) ((insert (cadr t)  x)) (caddr t)))

外面的一对括号是这里的问题。 (list (car t) ((insert (cadr t) x)) (caddr t))给你一个 list 。通过将另一对括号包裹在它周围,您试图应用该列表,就好像它是一个函数一样,您不能 - 因此是错误消息。

关于方案二叉搜索树错误 (R5RS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com