ट्रैक
/
Common Lisp
Common Lisp
/
अभ्यास
/
लेस्ली के लंबे ऐरे
लेस्ली के लंबे ऐरे

लेस्ली के लंबे ऐरे

सीखने का अभ्यास

परिचय

ऐरे

हम जो भाषा इस्तेमाल कर रहे हैं उसका नाम Lisp, LIST Processing का ही संक्षिप्त रूप है। इससे लगता है कि इस भाषा में एलिमेंट की ऐरे संभालने की सुविधाएँ ज़रूर होंगी, और यह सोच सही भी है!

Common Lisp में ऐरे के अलावा दूसरे डेटा स्ट्रक्चर भी होते हैं, फिर भी ऐरे का बहुत इस्तेमाल होता है।

Common Lisp में ऐरे एलिमेंट का एक क्रम होता है। इसे cons भी कहा जाता है (ज़्यादातर ऐतिहासिक कारणों से)। एलिमेंट का एक ही टाइप होना ज़रूरी नहीं है। उदाहरण के लिए, आप 1, two, "III" वाला ऐरे रख सकते हैं।

ऐरे बनाना

आप सीधे ऐसे कोट किए गए ऐरे को टाइप कर सकते हैं: '(1 two "III"), और इससे एक ऐरे बनकर इवैल्यूएट हो जाता है (इसे इवैल्यूएट करने पर (1 two "III") मिलता है)।

ऐरे बनाने के लिए दो मुख्य फंक्शन भी हैं: list और cons।

list शून्य या ज़्यादा आर्गुमेंट लेता है और उन वैल्यू से बना ऐरे देता है:

(list 1 'two "III") ; => (1 two "III")

cons दो एलिमेंट लेता है और एक ऐसा ऐरे बनाता है जिसमें पहला एलिमेंट उसका car (ऐरे का सिरा) होता है और दूसरा एलिमेंट उसका cdr (ऐरे का बाकी हिस्सा) होता है:

(cons 1 2)            ; => (1 . 2) ;; (a list without `nil` as its `cdr` is printed in this way)
(cons 1 nil)          ; => (1)
(cons 1 (cons 2 nil)) ; => (1 2)

car और cdr फंक्शन किसी ऐरे के car और cdr तक पहुँचने के लिए इस्तेमाल किए जा सकते हैं।

(first और rest, car और cdr के पर्यायवाची हैं और बिल्कुल वैसे ही काम करते हैं।)

लंबाई और किसी भी एलिमेंट तक पहुँच

किसी ऐरे की लंबाई length से पता की जा सकती है। खाली ऐरे की लंबाई शून्य होती है।

किसी भी एलिमेंट तक nth से पहुँचा जा सकता है (ध्यान दीजिए कि ऐरे में इंडेक्स शून्य से शुरू होता है)।

ऐरे की लंबाई से बड़ा इंडेक्स माँगना एरर नहीं है। इसके बजाय, इसका मान nil होता है:

(nth 23 '(short list)) ; => nil

ऐरे के शुरुआती एलिमेंट तक पहुँचने के लिए कई सहायक मेथड भी हैं: first, second, third, और इसी तरह tenth तक। मज़ेदार है, है ना?

ऐरे जोड़ना

दो या ज़्यादा ऐरे append से जोड़े जा सकते हैं:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '())     ; => (A B C)

append को दिया गया हर आर्गुमेंट एक ऐरे होना चाहिए।

निर्देश

लेस्ली नाम के एक Lisp एलियन को खरीदारी करनी है। खरीदारी का ऐरे होना बहुत ज़रूरी है। उसमें चीज़ें जोड़नी पड़ती हैं और उससे चीज़ें हटानी पड़ती हैं।

बेशक, कागज़-कलम से किसी Lisp एलियन का काम नहीं चलेगा। "List" तो "Lisp" शब्द का ही ज़्यादातर हिस्सा है! खरीदारी का हिसाब रखने के लिए कुछ फंक्शन तो लिखने ही पड़ेंगे।

क्या आप लेस्ली की मदद कर सकते हैं ताकि वे खरीदारी के ऐरे का हिसाब रख सकें?

1. नया ऐरे बनाना

सबसे पहले लेस्ली को एक खाली ऐरे बनाना है। इसके लिए new-list नाम का फंक्शन एकदम सही रहेगा।

(new-list) ; => ()

अरे नहीं... लेस्ली के मन में पहले से कुछ चीज़ें हैं। इसलिए उन्हें एक ऐसा फंक्शन चाहिए जो तीन चीज़ें ले (अच्छी बात है कि लेस्ली तीन चीज़ों का ही ऐरे बनाते हैं। न ज़्यादा, न कम!) और उन चीज़ों से एक नया खरीदारी का ऐरे बना दे। list-of-things नाम का फंक्शन लिखिए, जो तीन चीज़ें लेता है और उनका ऐरे लौटाता है।

(list-of-things 'bread 'milk 'butter) ; => '(bread milk butter)

2. ऐरे में चीज़ें जोड़ना

दुकान पर जाने से पहले लेस्ली भंडार में देखते हैं कि उन्हें क्या चाहिए। add-to-list फंक्शन लिखकर उनकी मदद कीजिए, जो किसी ऐरे के शुरू में एक चीज़ जोड़ता है।

(add-to-list 'butter '(bread)) ; => '(butter bread)

3. ऐरे में अगली चीज़ें कौन-सी हैं?

खरीदारी करते समय लेस्ली जानना चाहते हैं कि अगली बार क्या ढूँढना है। वे ऐरे में आगे झाँककर दूसरी, तीसरी या 23वीं चीज़ (उनका भाग्यशाली अंक) भी देखना पसंद करते हैं।

  • first-thing का मान ऐरे की पहली चीज़ होगा।
  • second-thing का मान दूसरी चीज़ होगा।
  • third-thing का मान तीसरी चीज़ होगा।
  • twenty-third-thing का मान तेईसवीं चीज़ होगा।
(first-thing '(bread butter milk)) ; => 'bread
(second-thing '(bread butter milk)) ; => 'butter
(third-thing '(bread butter milk)) ; => 'milk

4. ऐरे से एक चीज़ हटाना

लेस्ली ऐरे की पहली चीज़ ढूँढकर उसे शेल्फ से हटाना चाहते हैं। remove-first-item फंक्शन लिखकर उनकी मदद कीजिए, जो इनपुट ऐरे की पहली चीज़ के अलावा बाकी सब चीज़ों वाला ऐरे देता है।

(remove-first-item '(bread butter milk)) ; => '(butter milk)

5. छोटे ऐरे से बड़ा ऐरे बनाना

लेस्ली को पता चला कि उन्होंने गलती से एक नहीं, दो खरीदारी के ऐरे बना लिए हैं! list-append नाम का फंक्शन लिखिए, जो एक ऐसा ऐरे लौटाता है जिसमें पहले ऐरे के एलिमेंट पहले आते हैं और उनके बाद दूसरे ऐरे के एलिमेंट।

(list-append '(bread salt) '(butter milk)) ; => '(bread salt butter milk)

6. कितना लंबा?

लेस्ली को चिंता हो रही है कि इस खरीदारी में काफी समय लगेगा। इस ऐरे में कितनी चीज़ें हैं? just-how-long फंक्शन लिखिए, जो बताए कि उनका ऐरे कितना लंबा है।

(just-how-long '(bread milk butter salt)) ; => 4
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Common Lisp Exercism

लेस्ली के लंबे ऐरे शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Common Lisp को 27 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।