योजना में सूची या तो खाली सूची ()
(भी कुछ Lisps में nil
रूप में जाना जाता है), या एक विपक्ष सेल जिसका car
(भी first
के रूप में जाना जाता है) सूची का एक तत्व है और जिसका cdr
(है rest
के रूप में भी जाना जाता है) या तो शेष सूची (यानी, एक और सूची) है, या एक परमाणु जो सूची को समाप्त करता है। पारंपरिक टर्मिनेटर खाली सूची ()
है; ()
द्वारा समाप्त की गई सूचियों को "उचित सूचियां" कहा जाता है। किसी अन्य परमाणु द्वारा समाप्त सूची को "अनुचित सूची" कहा जाता है। सूची (1 2 3 4 5)
में तत्व 1, 2, 3, 4, और 5 शामिल हैं, और ()
द्वारा समाप्त किया गया है। आप अब, जब प्रणाली प्रिंट एक विपक्ष सेल, सामान्य स्थिति से
(car . cdr)
उदाहरण के लिए यह मुद्रित करने के लिए है
(cons 1 (cons 2 (cons 3 (cons 4 (cons 5())))))
द्वारा यह निर्माण कर सकता है, (cons 1 2)
का परिणाम
के रूप में मुद्रित किया जाता है
(1 . 2)
चूंकि सूचियां सेल कोशिकाओं से बनी हैं, इसलिए आप सूचियों के लिए भी इस नोटेशन का उपयोग कर सकते हैं:
'(1 2 3 4 5) ==
'(1 . (2 . (3 . (4 . (5 .())))))
यही कारण है, बल्कि भद्दा हालांकि, इसलिए अधिकांश lisps (सभी है कि मैं के बारे में पता) विपक्ष कोशिकाओं मुद्रण के लिए किसी विशेष परिस्थिति में: अगर 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 x y)
के बाद से एक उचित सूची अगर y
है):
(else (cons start (.. (add1 start) stop)))
अपना दूसरा मामला एक सूची लौटाएं और आपको पूरा सेट होना चाहिए।
जब आप '(.. 1 2)' करते हैं तो 'cond' में कौन सा मामला उपयोग किया जाता है? यह वापस क्या करता है? – Barmar