我正在尝试在二叉搜索树中删除某个值的出现。这就是我到目前为止所做的:
(define removeBin (lambda (x t)
(cond ((< x (car t)) (removeBin x (cadr t)))
((> x (car t)) (removeBin x (caddr t)))
((equal? x (car t))
(if(and (null? (cadr t)) (null? (caddr t))) '()
(let ((r (replacement t))) ((set! (car t) r) (removeBin r t))))))))
它给了我以下错误: set!:不是标识符:(car t) 那是什么意思?以及如何修复它以便设置!会工作吗?
谢谢
答案 0 :(得分:2)
在Racket中,您可以使用mcons
获得“可变对”,使用mcar
和mcdr
进行访问,并使用set-mcar!
和set-mcdr!
进行变异。如果您使用的是标准方案语言之一,则可以使用常规名称获取它们,例如,使用#lang r5rs
启动代码。
答案 1 :(得分:1)
正如错误消息所解释的那样,(car t)
不是有效的标识符,因此无法更改其值。
你需要像这样使用set-car!
:
(set-car! t r)
这会将car
的{{1}}更改为t
。