2010-12-11 46 views
1

J'essaie de supprimer une occurrence de certaines valeurs dans un arbre de recherche binaire. Voilà ce que j'ai jusqu'à présent:en utilisant set! pour modifier la valeur d'une variable dans 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)))))))) 

Il me donne l'erreur suivante: ensemble !: pas un identifiant dans: (voiture t) Qu'est-ce que cela veut dire? et comment puis-je le réparer pour cet ensemble! travaillerait?

merci

Répondre

1

Comme le message d'erreur explique (car t) n'est pas un identifiant valide, et donc sa valeur ne peut pas être changé.

Vous devez utiliser set-car! comme ceci:

(set-car! t r) 

Cela change la car de t à r.

+0

Merci de m'avoir répondu. J'ai essayé ce que vous avez dit mais ça me donne toujours une erreur: référence à un identifiant non défini: set-car! – user

+0

@user: il semble que votre implémentation Scheme l'ait supprimé, espérons que cela soit utile: http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/19f7de0580e5117a –

+0

La modification de l'implémentation a résolu le problème. Merci. – user

2

En Racket il y a des « paires mutables » que vous obtenez avec mcons, l'accès à mcar et mcdr, et mutent avec set-mcar! et set-mcdr!. Vous pouvez les obtenir en utilisant les noms conventionnels si vous utilisez l'un des langages de schéma standard, par exemple, en commençant votre code avec #lang r5rs.