Binar arbore de căutare în schema, încercarea de a utiliza Dr. Racket pentru a reveni pur și simplu adevărat sau fals dacă valoarea este prezentă în BST. Eroare

voturi
2

Sunt folosind Dr. Rachetă, limbaj destul de mare, iar eu încerc să fac un simplu arbore binar de căutare „în?“ metoda, care va reveni în cazul în care o valoare este în arborele binar de căutare sau nu. Acesta trebuie să fie generală, acceptând orice fel de arbore de căutare (dacă acesta conține șiruri, Ints, etc.), dar eu sunt difuzate în acest mesaj de eroare care mă înnebunește. Orice ajutor este apreciat, aici este codul:

EDITATĂ :: Acesta funcționează acum, dar nu cu nimic, dar numere (sau cel puțin nu funcționează cu siruri de caractere) .. problemă nouă:

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

Eroarea am primit spune:

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

Atunci când se utilizează:

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

ca intrare.

Întrebat 05/12/2010 la 04:46
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
2

Nu ar trebui să înfășurați argumentele într-un alt set de Parens, deci utilizați

(bstsearch  (cadr tree) value)

in loc de

(bstsearch  ((cadr tree) value))
Publicat 05/12/2010 la 05:00
sursa de către utilizator

voturi
2

O problemă este aveți dvs. <și> inversat. Presupunând că vrei sub-arborele din stânga pentru a fi mai mică, atunci (<valoare (arbore auto)) ar trebui să solicite din nou cu (arborele cadr).

De asemenea, ar trebui să utilizați #t în loc de (#t).

Publicat 05/12/2010 la 05:25
sursa de către utilizator

voturi
3

În ceea ce privește noua problemă, <și> funcționează numai pentru numere. O soluție simplă ar fi să treacă funcțiile de comparare ca argumente pentru procedura de dvs. bstsearch.

De asemenea, după cum sa menționat mai înainte, vă rugăm să indenta codul corect.

Publicat 05/12/2010 la 06:23
sursa de către utilizator

voturi
1

Ta problemă cu care se confruntă nou este din cauza funcției Comparer „=“. Dacă schimbi asta cu „egal?“ funcționeze ar trebui să fie generice și să lucreze în orice fel de date. Comparers, de asemenea, ar trebui să se schimbe, dacă doriți să-l generice. Trebuie să-l ia de la utilizator ca intrare versiune, astfel generic de ea ar trebui să fie:

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

  ))
  • Funcția Comparer ar trebui să fie în format de (XX -> boolean), "<", ">", "? string <" sunt construite în exemple, dar puteți scrie propria Comparer pentru propria structura de date prea

  • Rețineți că această condiție este egală pe linia 2.. Sper ca asta ajuta :)

Publicat 06/04/2011 la 10:05
sursa de către utilizator

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