Binarne drzewo poszukiwań na schemacie, starając się wykorzystać doktora rakiety, po prostu wrócić prawdziwe lub fałszywe, jeśli wartość jest obecny w BST. Błąd

głosy
2

Używam dr rakieta, język dość duży, a ja staram się zrobić prosty binarne drzewo poszukiwań „w?” Sposób, że powróci, jeśli wartość jest w wyszukiwaniu binarnym drzewie lub nie. To musi być ogólne, akceptując jakiejkolwiek wyszukiwarce drzewa (czy zawiera ona łańcuchy, ints, etc.), ale używam do tego komunikatu o błędzie, który doprowadza mnie do szału. Każda pomoc jest mile widziana, oto kod:

EDITED :: To działa teraz, ale nie z niczego, ale liczb (lub przynajmniej nie działa z ciągów) .. Nowe wydania:

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

Błąd Otrzymuję mówi:

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

Podczas używania:

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

jako wejście.

Utwórz 05/12/2010 o 04:46
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
2

Nie należy owinąć argumenty w innym zestawie parens, więc używaj

(bstsearch  (cadr tree) value)

zamiast

(bstsearch  ((cadr tree) value))
Odpowiedział 05/12/2010 o 05:00
źródło użytkownik

głosy
2

Jednym problemem jest to, masz swoją <i>, odwrócone. Zakładając, że chcesz, aby drzewo po lewej sub być mniejszy, a następnie (<wartość (drzewo samochód)) należy zadzwonić ponownie z drzewa (cadr).

Również należy użyć #ti zamiast (#t).

Odpowiedział 05/12/2010 o 05:25
źródło użytkownik

głosy
3

Jeśli chodzi o nowy problem, <i> działa tylko dla liczb. Prostym rozwiązaniem byłoby przekazać porównania funkcji jako argumenty do procedury bstsearch.

Ponadto, jak wspomniano wcześniej, należy wciąć kod poprawnie.

Odpowiedział 05/12/2010 o 06:23
źródło użytkownik

głosy
1

Nowo obliczu Problem jest z powodu swojej funkcji comparer „=”. Jeśli zmieni się z „równe?” Funkcja ta powinna być rodzajowa i pracować w każdym rodzaju danych. Porównywarki też powinno się zmienić, jeśli chcemy, aby było średnie. Musisz wziąć to od użytkownika jako wejście tak generycznych wersji powinno być:

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

  ))
  • Funkcja porównywarka powinny być w formacie (XX -> Boolean), "<", ">", "? Ciąg <" budowane są w przykładach, ale można napisać własny comparer dla własnej struktury danych za

  • Należy pamiętać, że warunek jest równy na linii 2.. Mam nadzieję, że to pomoże :)

Odpowiedział 06/04/2011 o 10:05
źródło użytkownik

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