используя набор!изменить значение переменной в drscheme - PullRequest
1 голос
/ 11 декабря 2010

Я пытаюсь удалить вхождение некоторого значения в двоичном дереве поиска. Это то, что я до сих пор:

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

2 голосов
/ 11 декабря 2010

В Racket есть «изменяемые пары», которые вы получаете с помощью mcons, доступ с помощью mcar и mcdr, и изменение с помощью set-mcar! и set-mcdr!.Вы можете получить их, используя обычные имена, если вы используете один из стандартных языков схем, например, начав свой код с #lang r5rs.

1 голос
/ 11 декабря 2010

Как объясняется в сообщении об ошибке, (car t) не является допустимым идентификатором, и поэтому его значение нельзя изменить.

Вам необходимо использовать set-car!, например:

(set-car! t r)

Это изменяет car из t на r.

...