Binært søketre i skjema, prøver å bruke Dr. Racket å bare returnere sant eller usant om verdien er til stede i BST. Feil

stemmer
2

Jeg bruker Dr. Racket, språk ganske stor, og jeg prøver å lage et enkelt binært søketre inn? metode, som vil returnere hvis en verdi i det binære søketre eller ikke. Det må være generell, akseptere noen form for søketre (om det inneholder strenger, ints, osv), men jeg kjører inn i denne feilmeldingen som er driver meg til vanvidd. Alle hjelpe er verdsatt, her er koden:

EDITED :: Det fungerer nå, men ikke med noe annet enn tall (eller i det minste ikke fungerer med strenger) .. Ny utgave:

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

Feilen Jeg mottar sier:

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

Når du bruker:

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

som input.

Publisert på 05/12/2010 klokken 03:46
kilden bruker
På andre språk...                            


4 svar

stemmer
2

Du bør ikke brytes argumentene i et annet sett med parens, så bruk

(bstsearch  (cadr tree) value)

i stedet for

(bstsearch  ((cadr tree) value))
Svarte 05/12/2010 kl. 04:00
kilden bruker

stemmer
2

Ett problem er at du har ditt <og> reversert. Antar du vil at venstre sub treet for å være mindre, da (<verdi (bil treet)) bør ringe igjen med (CADR treet).

Også du bør bruke #t i stedet for (#t).

Svarte 05/12/2010 kl. 04:25
kilden bruker

stemmer
3

Angående den nye utgaven, <og> bare fungere for tall. En enkel løsning ville være å passere sammenligningen fungerer som argumenter til bstsearch prosedyre.

Også, som nevnt før, kan du rykke inn koden riktig.

Svarte 05/12/2010 kl. 05:23
kilden bruker

stemmer
1

Den nylig møtt problemet er på grunn av din comparer funksjon "=". Hvis du endrer det med "lik?" funksjon det skal være generisk og arbeide i alle typer data. Comparers bør også endres hvis du ønsker å gjøre det generiske. Du må ta det fra brukeren som input så generisk versjon av det skal være:

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

  ))
  • SAMMENLIGN funksjon bør være i formatet av (XX -> boolsk), "<" ">", "? Streng <" er bygget i eksempler, men du kan skrive din egen comparer for din egen datastruktur for

  • Merk at samme tilstanden er på den 2. linjen. Jeg håper dette hjelper :)

Svarte 06/04/2011 kl. 09:05
kilden bruker

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