Binary Search Boom in schema, in een poging om Dr. Racket gebruiken om gewoon terug waar of onwaar als de waarde aanwezig is in BST is. Fout

stemmen
2

Ik ben met behulp van Dr. Racket, taal vrij groot, en ik ben op zoek naar een eenvoudige binaire zoekboom te maken in? methode, die zal terugkeren als een waarde in de binaire zoekboom of niet. Het moet algemeen zijn, het aanvaarden van een vorm van zoeken boom (of het nu strings, integers, enz. Bevatten), maar ik ben actief in deze foutmelding dat is me gek. Alle hulp wordt gewaardeerd, hier is de code:

EDITED :: Het werkt nu, maar niet met iets, maar nummers (of in ieder geval niet werkt met strijkers) .. Nieuwe editie:

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

De fout die ik ontvang zegt:

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

Tijdens gebruik:

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

als invoer.

De vraag is gesteld op 05/12/2010 om 04:46
bron van user
In andere talen...                            


4 antwoorden

stemmen
2

Je moet niet de argumenten verpakken in een andere set van haakjes, dus gebruik

(bstsearch  (cadr tree) value)

in plaats van

(bstsearch  ((cadr tree) value))
antwoordde op 05/12/2010 om 05:00
bron van user

stemmen
2

Een probleem is dat je moet je <en> omgekeerd. Ervan uitgaande dat u wilt dat uw linker sub boom te zijn de kleinere, dan (<value (auto boom)) moet opnieuw op te roepen met de (cadr boom).

Ook moet u gebruik maken #t in plaats van (#t).

antwoordde op 05/12/2010 om 05:25
bron van user

stemmen
3

Wat betreft uw nieuwe nummer, <en> werken alleen voor nummers. Een gemakkelijke oplossing zou zijn om de te vergelijken functies als argumenten door te geven aan uw bstsearch procedure.

Ook, zoals eerder vermeld, kunt u de juiste inspringen de code.

antwoordde op 05/12/2010 om 06:23
bron van user

stemmen
1

Uw onlangs geconfronteerd probleem is als gevolg van uw vergelijker function "=". Als je dat veranderen "die gelijk?" laten functioneren, moeten generiek zijn en werken in elke vorm van data. Comparers moet ook veranderen als je wilt om het generieke maken. Je moet het nemen van een gebruiker als input, zodat generieke versie van het zou moeten zijn:

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

  ))
  • Comparer functie moet in formaat (XX -> boolean), "<", ">", "? Reeks <" zijn gebouwd in de voorbeelden, maar u kunt uw eigen vergelijker voor uw eigen datastructuur te schrijven

  • Merk op dat gelijke toestand op de 2 lijn. Ik hoop dat dit helpt :)

antwoordde op 06/04/2011 om 10:05
bron van user

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