用套装!在drscheme中更改变量的值

时间:2010-12-11 13:11:43

标签: scheme racket

我正在尝试在二叉搜索树中删除某个值的出现。这就是我到目前为止所做的:

(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) 那是什么意思?以及如何修复它以便设置!会工作吗?

谢谢

2 个答案:

答案 0 :(得分:2)

在Racket中,您可以使用mcons获得“可变对”,使用mcarmcdr进行访问,并使用set-mcar!set-mcdr!进行变异。如果您使用的是标准方案语言之一,则可以使用常规名称获取它们,例如,使用#lang r5rs启动代码。

答案 1 :(得分:1)

正如错误消息所解释的那样,(car t)不是有效的标识符,因此无法更改其值。

你需要像这样使用set-car!

(set-car! t r)

这会将car的{​​{1}}更改为t