Binary arbre de recherche dans le schéma, en essayant d'utiliser le Dr Racket pour retourner simplement vrai ou faux si la valeur est présente dans BST. Erreur

voix
2

J'utilise le Dr Racket, langue assez grand, et je suis en train de faire un simple arbre de recherche binaire « dans? » méthode, qui sera de retour si une valeur est dans l'arbre de recherche binaire ou non. Il doit être général, accepter tout type d'arbre de recherche (si elle contient des chaînes, ints, etc.), mais je suis en cours d'exécution dans ce message d'erreur qui me rend dingue. Toute aide est appréciée, voici le code:

ÉDITÉE :: Il travaille maintenant, mais pas avec quoi que ce soit, mais le nombre (ou au moins ne fonctionne pas avec des cordes) .. Nouveau numéro:

(define (bstsearch tree value)
  (cond 
  ((null? tree) #f)
  ((< value (car tree))
      (bstsearch  (cadr tree) value))
  ((> value (car tree))
      (bstsearch (caddr tree) value))
  ((= value (car tree))
      #t)
  ))

L'erreur que je reçois dit:

<: expects type <real number> as 1st argument, given: horse; other arguments were: horse

Lorsque vous utilisez:

 (bstsearch '(horse (cow () (dog () ())) (zebra (yak ()()) ())) horse)

en entrée.

Créé 05/12/2010 à 04:46
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
2

Vous ne devriez pas envelopper les arguments dans un autre ensemble de parens, utilisez donc

(bstsearch  (cadr tree) value)

au lieu de

(bstsearch  ((cadr tree) value))
Créé 05/12/2010 à 05:00
source utilisateur

voix
2

Un problème est que vous avez votre <et> inversé. En supposant que vous voulez que votre arbre secondaire gauche pour être le plus petit, puis (<valeur (arbre de voiture)) devrait appeler à nouveau avec le (arbre CADR).

Aussi, vous devez utiliser #t au lieu de (#t).

Créé 05/12/2010 à 05:25
source utilisateur

voix
3

En ce qui concerne votre question nouvelle, <et> ne fonctionne que pour les nombres. Une solution simple serait de transmettre les fonctions comparer les arguments à votre procédure de bstsearch.

En outre, comme mentionné précédemment, s'il vous plaît le code correctement en retrait.

Créé 05/12/2010 à 06:23
source utilisateur

voix
1

Votre nouveau problème se pose est à cause de votre fonction comparateur « = ». Si vous changez cela avec « égal? » fonction, il doit être générique et travailler dans tout type de données. Devraient aussi changer comparateurs si vous voulez faire générique. Vous devez prendre de l'utilisateur en entrée la version générique afin de celui-ci devrait être:

(define (bstsearch tree value comparer)

(cond 

((null? tree) #f)

  ((equal? value (car tree)) #t)

  ((comparer value (car tree))
      (bstsearch  (cadr tree) value))

  ((not (comparer value (car tree)))
      (bstsearch (caddr tree) value))

  ))
  • fonction doit être Comparer format (XX -> booléen), "<", ">", "? chaîne <" sont construits dans des exemples, mais vous pouvez écrire votre propre comparateur pour votre propre structure de données trop

  • Notez que la condition égale est sur la ligne 2.. J'espère que ça aide :)

Créé 06/04/2011 à 10:05
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more