尝试创建不可变的二叉搜索树。我从创建构造函数开始创建空列表,以及使用以下代码逐个向树添加元素的方法。在球拍中创建二叉搜索树?
#lang racket
(define (constructTree) '())
(define (addToTree Tree k v)
(cond [(null? Tree)
(cons Tree cons((cons k '()) v))]
[else
(cond [(>(car Tree) k)
(cons Tree cons((cons k '()) v))
]
[else
(cons Tree '() cons((cons k '()) v))
]
)]
)
)
(define bst (addToTree (addToTree (addToTree (addToTree (constructTree)3 "3") 1 "1") 2 "2") 5 "5"))
bst
我的意思是一成不变的,如果 我叫(define b0 (constructTree))
b0
应该返回'()
(define b1 (addToTree b0 4 "4"))
b1
应该返回'(4 "4"()())
(define b2 (addToTree b1 6 "6"))
b2
应该返回'(4 "4"() (6 "6"()()))
...等。
但我得到这个错误:应用程序:不是一个过程; 期望一个程序,可以适用于参数 给出:'(3) 参数...:
任何线索为什么我得到这个错误或我做错了什么?先谢谢你。
直接的问题是,在某些情况下,你已经把'cons'放在了parens的外面。 –
@BrendanCannell我不明白你的意思,因为你知道我的球拍和功能语言的第一次代码 – kero
在所有三种情况下,'(cons树cons((cons k'())v))'应该是(cons树(cons(cons k'())v))'。 –