Bináris keresés Tree rendszer próbál használni Dr. ütő egyszerűen vissza igaz vagy hamis értéket, ha jelen BST. Hiba

szavazat
2

Én a Dr. ütő, a nyelv elég nagy, és próbálok egy egyszerű bináris keresési fa „a?” módszer, hogy vissza fog térni, ha az érték a bináris keresési fát, vagy sem. Meg kell általános, elfogadva bármilyen keresési fa (függetlenül attól, hogy tartalmaznak húrok, ints, stb), de én fut be ezt a hibaüzenetet, amely megőrjít. Minden segítséget előre is köszönjük, itt a kód:

SZERKESZTETT :: most már működik, de nem semmit, de a számok (vagy legalábbis nem működik vonósok) .. Új probléma:

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

A hiba kapok mondja:

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

Használat során:

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

bemenetként.

A kérdést 05/12/2010 04:46
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
2

Nem szabad csomagolja érveket másik meg a parens, ezért használja

(bstsearch  (cadr tree) value)

ahelyett

(bstsearch  ((cadr tree) value))
Válaszolt 05/12/2010 05:00
a forrás felhasználó

szavazat
2

Az egyik probléma az, hogy van a <és> megfordult. Feltételezve azt szeretné, hogy a bal al-fa is a kisebb, majd (<érték (autó fa)) hívjanak meg újra a (CADR fa).

Szintén érdemes használni #t helyett (#t).

Válaszolt 05/12/2010 05:25
a forrás felhasználó

szavazat
3

Ami az új kérdés, <és> csak akkor működik számokat. Egy egyszerű megoldás az lenne, ha az összehasonlító függvények paraméterként a bstsearch eljárást.

Továbbá, mint már említettük, kérjük behúzni a kódot helyesen.

Válaszolt 05/12/2010 06:23
a forrás felhasználó

szavazat
1

Az újonnan szembe probléma, mert a összehasonlítóhoz funkció „=”. Ha változtatni az „egyenlő?” működéséhez meg kell általános és dolgozni bármilyen adatot. Comparers is meg kell változtatni, ha azt szeretné, hogy ez az általános. Meg kell venni azt a felhasználói input így generikus változatát kell:

(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 funkciót kell lennie formátumban (XX -> logikai), "<", ">", "string <?" épülnek példák, de írhatsz a saját összehasonlítóhoz saját adatstruktúra is

  • Figyeljük meg, hogy egyenlő feltétel van a 2. sorban. Remélem ez segít :)

Válaszolt 06/04/2011 10:05
a forrás felhasználó

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