[英]Binary Search Tree in Scheme, trying to use Dr. Racket to simply return true or false if value is present in BST. Error
我正在使用Dr。Racket,語言Pretty Big,我正在嘗試制作一個簡單的二叉搜索樹“in?” 方法,如果值在二進制搜索樹中,則返回。 它需要是通用的,接受任何類型的搜索樹(無論它是否包含字符串,整數等),但我遇到了這個錯誤消息,這讓我瘋了。 任何幫助表示贊賞,這里是代碼:
EDITED ::它現在有效,但除了數字之外沒有任何東西(或者至少不能用於字符串)。新問題:
(define (bstsearch tree value)
(cond
((null? tree) #f)
((< value (car tree))
(bstsearch (cadr tree) value))
((> value (car tree))
(bstsearch (caddr tree) value))
((= value (car tree))
#t)
))
我收到的錯誤說:
<: expects type <real number> as 1st argument, given: "horse"; other arguments were: "horse"
使用時:
(bstsearch '("horse" ("cow" () ("dog" () ())) ("zebra" ("yak" ()()) ())) "horse")
作為輸入。
關於您的新問題,<和>僅適用於數字。 一個簡單的解決方案是將比較函數作為參數傳遞給bstsearch過程。
另外,如前所述,請正確縮進代碼。
你不應該將參數包裝在另一組parens中,所以請使用
(bstsearch (cadr tree) value)
代替
(bstsearch ((cadr tree) value))
一個問題是你的<和>逆轉了。 假設您希望左子樹更小,那么(<值(車輛樹))應該再次使用(cadr樹)調用。
你也應該用#t代替(#t)。
您遇到的新問題是因為您的比較器功能“=”。 如果你用“相等”改變它? 功能它應該是通用的,適用於任何類型的數據。 如果你想讓它變得通用,比較者也應該改變。 您必須從用戶那里獲取它作為輸入,因此它的通用版本應該是:
(define (bstsearch tree value comparer)
(cond
((null? tree) #f)
((equal? value (car tree)) #t)
((comparer value (car tree))
(bstsearch (cadr tree) value))
((not (comparer value (car tree)))
(bstsearch (caddr tree) value))
))
Comparer函數的格式應為(XX - > boolean),“<”,“>”,“string <?” 是在示例中構建的,但您也可以為自己的數據結構編寫自己的比較器
請注意,相等條件位於2.行。 我希望這有幫助 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.