簡體   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