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

Scheme 方案二进制搜索树错误(R5RS),scheme,binary-search-tree,racket,r5rs,Scheme,Binary Search Tree,Racket,R5rs,我对Scheme和函数式语言是完全陌生的。我正在尝试创建一个二进制搜索树。节点的格式是由三个元素组成的列表,第一个元素是节点上的值,第二个元素是左子节点,第三个元素是右子节点。我有一个“make”函数,它创建一个空树:(())。我还有插入功能。代码如下: ;Inserts a number into the tree (define (insert t x) (cond ((null? (car t)) (list x (make) (make))) ((< x

我对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))
)
然后,我收到以下错误:

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)))
外圆括号是这里的问题<代码>(列表(car t)((插入(cadr t)x))(caddr t))为您提供一个列表。通过将另一对括号括起来,您试图应用该列表,就像它是一个函数一样,但您不能这样做—因此出现了错误消息


外圆括号是这里的问题<代码>(列表(car t)((插入(cadr t)x))(caddr t))为您提供一个列表。通过将另一对括号括起来,您试图应用该列表,就好像它是一个函数,但您不能这样做-因此出现了错误消息。

非常感谢!我觉得这是我的一个愚蠢的错误。工作得很有魅力。我想整个“如果有疑问,请添加更多括号”在这里并不适用。@Ryan您知道Python是如何区分缩进的,Ruby是如何区分空格的吗?Lisp和Scheme是括号敏感的。非常感谢!我觉得这是我的一个愚蠢的错误。工作得很有魅力。我想整个“如果有疑问,请添加更多括号”在这里并不适用。@Ryan您知道Python是如何区分缩进的,Ruby是如何区分空格的吗?Lisp和Scheme对括号敏感。
((list (car t) ((insert (cadr t)  x)) (caddr t)))