Binární vyhledávací strom ve schématu, se snaží používat dr raketa jednoduše vrátí true nebo false, pokud je přítomen v BST hodnota. Chyba

hlasů
2

Jsem pomocí dr raketa, jazyk dost velký, a snažím se udělat jednoduchou binární vyhledávací strom „dovnitř?“ Metoda, která vrátí v případě, že hodnota je v binárním vyhledávacím stromu, nebo ne. To musí být obecně přijmout jakýkoliv druh vyhledávacího stromu (ať už obsahují řetězce, celých čísel, atd), ale běžím do této chybové zprávy, která mi jede ořechy. Jakákoliv pomoc je oceňována, tady je kód:

EDITOVANÁ :: Funguje to teď, ale ne s ničím jiným než čísel (nebo alespoň nepracuje s řetězci) .. Nový vydání:

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

Došlo k chybě Dostávám říká:

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

Při použití:

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

jako vstup.

Položena 05/12/2010 v 04:46
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
2

Neměli byste zabalit argumenty v jiné sadě parens, takže použití

(bstsearch  (cadr tree) value)

namísto

(bstsearch  ((cadr tree) value))
Odpovězeno 05/12/2010 v 05:00
zdroj uživatelem

hlasů
2

Jedním z problémů je nemáte <a> zvrátit. Za předpokladu, že chcete, aby vaše levá sub strom být menší, pak (<hodnota (auto tree)) by měla zavolat znovu s (CADR stromu).

Také byste měli používat #t místo (#T).

Odpovězeno 05/12/2010 v 05:25
zdroj uživatelem

hlasů
3

Pokud jde o vaši novou emisi, <i> pracovat pouze pro čísla. Snadným řešením by bylo projít porovnání funkce jako argumenty ke svému postupu bstsearch.

Také, jak bylo zmíněno dříve, prosím odsazení kód správně.

Odpovězeno 05/12/2010 v 06:23
zdroj uživatelem

hlasů
1

Váš nově čelí problému je kvůli své funkci Comparer „=“. Změníte-li, že se „rovné?“ fungovat by mělo být obecné a pracovat v nějakém druhu dat. Comparers také měli, pokud chcete, aby byl druhový změní. Musíte to vzít od uživatele jako vstup tak generickou verzi by mělo být:

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

  ))
  • Funkce Comparer by měly být ve formátu (XX -> boolean), "<", ">", "? string <" jsou postaveny v příkladech, ale můžete napsat svůj vlastní Comparer pro své vlastní datové struktury příliš

  • Všimněte si, že rovná podmínka je na 2. řádku. Doufám, že to pomůže :)

Odpovězeno 06/04/2011 v 10:05
zdroj uživatelem

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