2010-12-11 22 views
1

バイナリ検索ツリーで、ある値のオカレンスを削除しようとしています。これは私がこれまで持っているものです。セットを使用! 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)))))))) 

それは私に次のエラーを与えている:セット!:ない識別子で:(カートン) をそれは何を意味するのでしょうか?どのように私はそれを固定するように修正することができます!うまくいく?エラーメッセージが説明するように

(car t)は有効な識別子ではありませんので、その値を変更することはできません、あなた

答えて

1

に感謝します。

あなたはこのようset-car!を使用する必要があります。

(set-car! t r) 

これはrtcarを変更します。ラケットで

+0

私にお答えいただきありがとうございます。私はあなたが言ったことを試みたが、それでも私にエラーを与えている:未定義の識別子への参照:set-car! – user

+0

@user:Schemeの実装で削除されたようですが、これが便利だと思います。http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/19f7de0580e5117a –

+0

実装を変更すると問題が解決しました。ありがとう。 – user

2

そこには、mconsmcarmcdrとのアクセスを得る「可変ペア」であり、set-mcar!set-mcdr!に変異させます。 #lang r5rsでコードを開始するなど、標準スキーム言語のいずれかを使用している場合は、従来の名前を使用してそれらを取得できます。