Δυαδική Αναζήτηση δέντρο στο σχήμα, προσπαθεί να χρησιμοποιήσει Δρ ρακέτα για να επιστρέψει απλά αληθής ή ψευδής αν η τιμή είναι παρούσα σε BST. Λάθος

ψήφοι
2

Είμαι χρησιμοποιώντας τον Δρ ρακέτα, γλώσσα αρκετά μεγάλο, και προσπαθώ να κάνω μια απλή δυαδικό δένδρο αναζήτησης «μέσα;» μέθοδο, η οποία θα επιστρέψει, αν μια τιμή δεν είναι στο δυαδικό δέντρο αναζήτησης ή όχι. Πρέπει να είναι γενική, δέχεται κάθε είδους δέντρο αναζήτησης (αν περιέχει χορδές, ints, κλπ), αλλά τρέχω σε αυτό το μήνυμα λάθους που οδήγηση με καρύδια. Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη, εδώ είναι ο κώδικας:

ΕΠΙΜΕΛΕΙΑ :: Λειτουργεί τώρα, αλλά όχι με οτιδήποτε άλλο εκτός από τους αριθμούς (ή τουλάχιστον δεν λειτουργεί με χορδές) .. Νέα έκδοση:

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

Το σφάλμα είμαι λήψη λέει:

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

Οταν χρησιμοποιείτε:

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

ως είσοδο.

Δημοσιεύθηκε 05/12/2010 στις 04:46
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
2

Δεν πρέπει να τυλίξετε τα επιχειρήματα σε άλλο σύνολο των παρενθέσεων, οπότε η χρήση

(bstsearch  (cadr tree) value)

αντί

(bstsearch  ((cadr tree) value))
Απαντήθηκε 05/12/2010 στις 05:00
πηγή χρήστη

ψήφοι
2

Ένα πρόβλημα είναι ότι πρέπει σας <και> αντιστραφεί. Υποθέτοντας ότι θέλετε αριστερό υπο το δέντρο σας να είναι η μικρότερη, τότε (<αξία (δέντρο αυτοκίνητο)) θα πρέπει να καλέσει και πάλι με την (δέντρο CADR).

Επίσης, θα πρέπει να χρησιμοποιήσετε #t αντί για (# t).

Απαντήθηκε 05/12/2010 στις 05:25
πηγή χρήστη

ψήφοι
3

Όσον αφορά το νέο σας θέμα, <και> λειτουργεί μόνο για τους αριθμούς. Μια εύκολη λύση θα ήταν να περάσουν τα συγκρίνετε λειτουργεί ως επιχειρήματα για την διαδικασία bstsearch σας.

Επίσης, όπως προαναφέρθηκε, παρακαλούμε εσοχή σωστά τον κωδικό.

Απαντήθηκε 05/12/2010 στις 06:23
πηγή χρήστη

ψήφοι
1

πρόσφατα αντιμετώπισε πρόβλημα σας είναι εξαιτίας της comparer λειτουργία σας «=». Αν αλλάξει αυτό με την «ίσοι;» λειτουργία θα πρέπει να είναι γενικές και να εργάζονται σε κάθε είδους δεδομένων. Comparers, επίσης, θα πρέπει να αλλάξει, αν θέλετε να κάνετε το γενικό. Θα πρέπει να το πάρετε από το χρήστη ως είσοδο τόσο γενική έκδοση του θα πρέπει να είναι:

(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 θα πρέπει να είναι σε μορφή (XX -> Boolean), "<", ">", "; κορδόνι <" είναι χτισμένα σε παραδείγματα, αλλά μπορείτε να γράψετε τη δική σας comparer για τη δική σας δομή δεδομένων είναι πολύ

  • Σημειώστε ότι η ισότιμη κατάσταση είναι στο 2. γραμμή. Ελπίζω αυτό να βοηθήσει :)

Απαντήθηκε 06/04/2011 στις 10:05
πηγή χρήστη

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