दिलचस्प पोस्ट
MATLAB के MEX कंपाइलर के रूप में जीसीसी (मिनजीडब्ल्यू) का उपयोग करना आर मार्कडाउन को पीडीएफ में बदलने के लिए कैसे? MKPinAnnotationView: क्या तीन से अधिक रंग उपलब्ध हैं? क्या COUNT (*) हमेशा परिणाम निकालते हैं? आकृति ऊंचाई / चौड़ाई के लिए बुनना चक विकल्प काम नहीं कर रहे हैं टर्नरी ऑपरेटर अनपेक्षित रूप से क्यों पूर्णांक डालें? पूरे Django url कॉन्फ़िगरेशन को निर्धारित करें जावास्क्रिप्ट में कुंजीप्रेसेस का पता लगाने का सबसे सरल तरीका Nginx में $ मेजबान और $ http_host का अंतर क्या है डिफ़ॉल्ट नाम स्थान वाले XML दस्तावेज़ों पर XPath का उपयोग कैसे करें HoloEverywhere आयात करने में त्रुटि तेज सी या उद्देश्य-सी गणित पार्सर क्या है? खिड़कियां बैच फ़ाइलें: पाश के लिए वैरिएबल सेट करना नेटबीन्स में जावा हीप आकार कैसे बढ़ाएं? सेलेनियम तत्व दिखाई नहीं दे रहा अपवाद

लिस्प में पुनरावर्ती श्रेणी एक अवधि जोड़ता है?

(define .. (lambda (start stop) (cond ((> (add1 start) stop) (quote ())) ((eq? (add1 start) stop) (sub1 stop)) (else (cons start (.. (add1 start) stop)))))) 

मैंने एक साधारण श्रेणी फ़ंक्शन परिभाषित किया है। इरादे के लिए है

 (.. 1 5) --> (1 2 3 4) 

इसके बजाय, मेरे टपल में एक विचित्र अवधि जोड़ा जा रहा है और मुझे पता नहीं क्यों है:

 (.. 1 5) --> (1 2 3 . 4) 

मुझे समझ में नहीं आता कि यह क्यों हो रहा है किसी भी मदद की सराहना की है

वेब के समाधान से एकत्रित समाधान "लिस्प में पुनरावर्ती श्रेणी एक अवधि जोड़ता है?"

योजना में एक सूची या तो खाली सूची () (कुछ लिस्प्स में nil रूप में भी जाना जाता है), या एक विपक्ष सेल जिसका car ( first भी जाना जाता है) सूची का एक तत्व है और जिनके cdr ( rest रूप में भी जाना जाता है) या तो है शेष सूची (यानी, एक अन्य सूची), या एक परमाणु जो सूची को समाप्त करती है पारंपरिक टर्मिनेटर खाली सूची है () ; सूचियों द्वारा समाप्त () को "उचित सूची" कहा जाता है किसी अन्य परमाणु द्वारा समाप्त की जाने वाली सूची को "अनुचित सूचियां" कहा जाता है सूची (1 2 3 4 5) में तत्व 1, 2, 3, 4 और 5 शामिल हैं, और इसे समाप्त कर दिया गया है () । आप इसका निर्माण कर सकते हैं

 (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 ()))))) 

अब, जब सिस्टम एक विपक्ष कक्ष को प्रिंट करता है, तो सामान्य मामला इसे प्रिंट करना है

 (car . cdr) 

उदाहरण के लिए, (cons 1 2) का परिणाम मुद्रित किया गया है

 (1 . 2) 

चूंकि सूचियाँ विपक्ष कोशिकाओं के बने हैं, इसलिए आप सूचियों के लिए इस नोटेशन का भी उपयोग कर सकते हैं:

 '(1 2 3 4 5) == '(1 . (2 . (3 . (4 . (5 . ()))))) 

हालांकि, यह बहुत सी भद्दा है, हालांकि, ज्यादातर लिस्प्स (जो मुझे पता है) में विपक्ष कोशिकाओं को छपाई करने के लिए एक विशेष मामला है: यदि cdr एक सूची (या तो एक अन्य विपक्ष सेल या,) है, तो प्रिंट नहीं करें . , और cdr के आसपास के कोष्ठक को मुद्रित न करें (जो अन्यथा होगा, क्योंकि यह एक सूची है)। तो, यदि आप परिणाम की तरह देख रहे हैं

 (1 2 3 . 4) 

इसका मतलब है कि आपको एक अनुचित सूची मिली है जिसे परमाणु 4 द्वारा समाप्त किया गया है इसमें संरचना है

 (1 . (2 . (3 . 4))) 

अब सवाल यह है कि आपके कोड में सूची निर्माण कितना बड़ा हो गया? .. हमेशा एक उचित सूची वापस करना माना जाता है, तो हम मामलों को देखें: पहला मामला हमेशा एक उचित सूची (रिक्त सूची) देता है:

 ((> (add1 start) stop) (quote ())) 

दूसरा मामला ऐसा लगता है कि ऐसा कुछ वापस कर सकता है जो एक सूची नहीं है (यह माना जाता है कि (sub1 stop) == (- stop 1) ):

 ((eq? (add1 start) stop) (sub1 stop)) 

अब, यदि .. सही ढंग से काम कर रहा था, तो तीसरा मामला हमेशा एक उचित सूची वापस कर रहा होगा (क्योंकि (cons xy) एक उचित सूची है यदि y है):

 (else (cons start (.. (add1 start) stop))) 

अपना दूसरा मामला एक सूची वापस करें और आपको सभी सेट होना चाहिए

आपकी अभिव्यक्ति (sub1 stop) को पढ़ने की जरूरत है (list (sub1 stop))

cons को एक उचित सूची बनाने के क्रम में, दूसरे तत्व को एक सूची बनाने की आवश्यकता है इस प्रकार, आपके फ़ंक्शन .. प्रत्येक cond खंड के लिए कुछ प्रकार की सूची वापस करनी चाहिए।

Cond का यह हिस्सा निकालें

  ((eq? (add1 start) stop) (sub1 stop)) 

यह समय से पहले खत्म हो रहा है