2
對於一般的Scheme和函數式語言,我是全新的。我正在嘗試創建一個二叉搜索樹。節點的格式是三個元素的列表,第一個是節點的值,第二個是左側子節點,第三個是右側子節點。我有一個「make」函數,它創建一個空樹:(()()())。我也有插入功能。下面是代碼:Scheme二叉搜索樹錯誤(R5RS)
;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到樹中的END時失敗。直到它,它按計劃運作。這是我的愚蠢語法/邏輯錯誤的原因嗎?
非常感謝!我有一種感覺,這是我的一個愚蠢的錯誤。像魅力一樣工作。我想整個「如有疑問,增加更多的括號」在這裏不適用。 –
@Ryan你知道Python是如何對縮進敏感的,Ruby是否對空白敏感? Lisp和Scheme是括號敏感的。 –