योजना में द्विआधारी खोज वृक्ष, डॉ रैकेट का उपयोग करने के लिए बस सही या गलत वापस जाने के लिए करता है, तो मूल्य 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 -> बुलियन), "<", ">", "? स्ट्रिंग <" उदाहरण में निर्माण कर रहे हैं, लेकिन आप भी अपने खुद के डेटा संरचना के लिए अपने स्वयं के 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