Binärer Suchbaum in Schema, versucht Dr. Racket zu verwenden, um einfach wahr oder falsch zurück, wenn Wert in BST ist. Error

stimmen
2

Ich bin mit Dr. Schlägern, Sprache ziemlich groß, und ich versuche, einen einfachen binären Suchbaum zu machen „in?“ Verfahren, dass, wenn ein Wert in dem binären Suchbaum oder nicht zurückkehren wird. Es muss allgemein sein, jede Art von Suchbaum zu akzeptieren (ob es Zeichenfolgen enthalten, Ints, etc.), aber ich laufe in dieser Fehlermeldung, die mich verrückt fährt. Jede Hilfe ist willkommen, hier ist der Code:

EDITED :: Es funktioniert jetzt, aber nicht mit alles andere als Zahlen (oder zumindest nicht mit Streichern arbeiten) .. Neue Ausgabe:

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

Der Fehler Ich erhalte sagt:

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

Beim Benutzen:

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

als Eingabe.

Veröffentlicht am 05/12/2010 um 04:46
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
2

Sie sollten die Argumente in einem anderen Satz von Pars nicht umgebrochen, so verwenden

(bstsearch  (cadr tree) value)

Anstatt von

(bstsearch  ((cadr tree) value))
Beantwortet am 05/12/2010 um 05:00
quelle vom benutzer

stimmen
2

Ein Problem ist, haben Sie Ihre <und> umgekehrt. Vorausgesetzt, dass Sie Ihre linke Unterbaum wollen die kleiner sein, dann ist (<value (Auto Baum)) sollte erneut aufrufen mit dem (CADR Baum).

Auch sollten Sie #t statt (#t) verwenden.

Beantwortet am 05/12/2010 um 05:25
quelle vom benutzer

stimmen
3

In Bezug auf Ihre neue Ausgabe, <und> nur für Zahlen arbeiten. Eine einfache Lösung wäre es, die Vergleichsfunktionen als Argumente für Ihre bstsearch Prozedur zu übergeben.

Auch ist, wie bereits erwähnt, einrücken bitte den Code korrekt.

Beantwortet am 05/12/2010 um 06:23
quelle vom benutzer

stimmen
1

Ihr neu konfrontiert Problem ist aufgrund Ihrer Funktion Vergleich „=“. Wenn Sie das mit ändern „gleich?“ funktioniert es in jeder Art von Daten Generika und arbeiten soll. Comparers sollte auch, wenn Sie es generische machen möchten ändern. Sie müssen es nehmen vom Benutzer als Eingabe so generische Version von es sein sollte:

(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 Funktion im Format sein sollte (XX -> boolean), "<", ">", "? Zeichenfolge <" sind in den Beispielen gebaut, aber Sie können auch Ihre eigenen Vergleich für Ihre eigene Datenstruktur schreiben

  • Beachten Sie, dass die gleiche Bedingung auf der 2. Zeile ist. Ich hoffe das hilft :)

Beantwortet am 06/04/2011 um 10:05
quelle vom benutzer

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