繁体   English   中英

方案二进制搜索树错误(R5RS)

[英]Scheme Binary Search Tree Error (R5RS)

一般而言,我对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]

我检查并重新检查了括号...并在调试模式下运行它,但我发现在将2插入树的末尾它失败了。 在此之前,它按计划工作。 这是否是我愚蠢的语法/逻辑错误的原因?

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

这里的括号对是外面的问题。 (list (car t) ((insert (cadr t) x)) (caddr t))给您一个列表。 通过在其周围加上另一对括号,您试图像应用程序那样使用该列表,而这是您不能执行的,因此会出现错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM