रिड्यूसिंग में किसी सीक्वेंस के हर एलिमेंट पर एक फंक्शन बार-बार लगाया जाता है और उनके परिणामों को किसी तरह जमा किया जाता है। जो फंक्शन लगाया जाता है, वह दो पैरामीटर लेता है: अब तक जमा हुई वैल्यू और वह आइटम जिस पर काम करना है। इस फंक्शन का मान नई जमा हुई वैल्यू होना चाहिए।
Common Lisp में यह काम reduce फंक्शन से किया जाता है।
इसका सबसे सरल रूप ऐसा दिखता है:
(reduce #'function-to-apply sequence :initial-value value)
ध्यान दीजिए कि यहाँ एक शुरुआती वैल्यू दी जाती है। जब पहला एलिमेंट प्रोसेस होता है, तो यही 'अब तक जमा हुई वैल्यू' फंक्शन को दी जाती है।
यहाँ एक उदाहरण है जो ऐरे की संख्याओं को जोड़ता है और 10 की शुरुआती वैल्यू से शुरू करता है:
(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20
ध्यान रखिए कि अगर सीक्वेंस खाली है, तो फंक्शन कभी कॉल नहीं होता और उस फॉर्म का मान initial-value ही होता है।
Lisp एलियन लोगान को संख्याएँ पसंद हैं और चीज़ों को व्यवस्थित करना भी।
वे चाहते हैं कि आप उनकी मदद करें और एक ऐसा फंक्शन लिखें जो संख्याओं का एक ऐरे लेकर दो ऐरे का जोड़ा बनाए। इनमें पहला ऐरे सारी विषम संख्याओं का होता है और दूसरा सारी सम संख्याओं का।
सबसे पहले आपको एक फंक्शन बनाना है जो दो ऐरे का जोड़ा और एक संख्या लेता है और यह देखकर कि वह संख्या विषम है या सम, उसे सही उप-ऐरे में डाल देता है:
(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))
अब, जो फंक्शन आपने अभी बनाया है उसका उपयोग करके आप एक और फंक्शन लिख सकते हैं, जो संख्याओं का एक ऐरे लेता है और ऊपर की तरह उन्हें श्रेणी में रख देता है:
(partition-numbers '(1 2 3 4)) ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Exercism पर साइन अप कीजिए और Common Lisp को 27 कॉन्सेप्ट92 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।