2010-12-11 20 views
1

我试图删除二叉搜索树中某个值的出现。这是我到目前为止有:使用set!更改drscheme中变量的值

(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)))))))) 

它给我下面的错误:一套!:不是一个标识符:(汽车T) 是什么意思呢?我该如何解决这个问题呢!会工作?

谢谢

回答

1

随着错误消息解释说,(car t)是不是有效的标识符,因此它的价值不能被改变。

您需要使用set-car!这样的:

(set-car! t r) 

这改变的tcarr

+0

谢谢你回答我。我试过你说的,但它仍然给我一个错误:引用未定义的标识符:set-car! – user 2010-12-11 13:28:07

+0

@user:似乎您的Scheme实施已将其删除,希望这很有用:http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/19f7de0580e5117a – 2010-12-11 13:35:38

+0

更改实施可解决问题。谢谢。 – user 2010-12-11 13:47:42

2

球拍有“可变双”那你mcons得到的,与mcarmcdr访问,并与set-mcar!set-mcdr!变异。如果您使用其中一种标准方案语言,则可以使用常规名称来获取它们,例如,通过#lang r5rs开始您的代码。