রিডিউসিং হলো একটি সিকোয়েন্সের প্রতিটি এলিমেন্টের উপর একটি ফাংশন বারবার প্রয়োগ করা এবং কোনো একভাবে ফলাফলগুলো জমা করা। প্রয়োগ করা ফাংশনটি দুটি প্যারামিটার নেয়: বর্তমানে জমা হওয়া মান এবং প্রসেস করার জন্য আইটেমটি। এর ফলাফল অবশ্যই নতুন জমা হওয়া মান হতে হবে।
Common Lisp-এ এই কাজটি করা হয় reduce ফাংশন দিয়ে।
এর সবচেয়ে সরল রূপে এটি দেখতে এমন:
(reduce #'function-to-apply sequence :initial-value value)
লক্ষ্য করুন, এখানে একটি ইনিশিয়াল ভ্যালু দেওয়া হয়, যেটিই হবে প্রথম এলিমেন্ট প্রসেস করার সময় ফাংশনে পাঠানো 'বর্তমানে জমা হওয়া মান'।
এখানে একটি উদাহরণ দেওয়া হলো, যেখানে ১০ ইনিশিয়াল ভ্যালু দিয়ে শুরু করে লিস্টের সংখ্যাগুলো একসাথে যোগ করা হয়েছে:
(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20
মনে রাখবেন, সিকোয়েন্সটি যদি খালি হয়, তাহলে ফাংশনটি কখনোই কল করা হয় না এবং ফর্মটির ফলাফল হয় ইনিশিয়াল ভ্যালু।
লিস্প এলিয়েন লোগান সংখ্যা পছন্দ করে, আর গুছিয়ে রাখতেও ভালোবাসে।
তারা আপনাকে একটি ফাংশন লিখতে সাহায্য করার অনুরোধ করে। ফাংশনটি সংখ্যার একটি অ্যারে নেবে এবং দুটি অ্যারের একটি জোড়া তৈরি করবে: প্রথমটিতে থাকবে সব বিজোড় সংখ্যা, দ্বিতীয়টিতে সব জোড় সংখ্যা।
প্রথমে আপনাকে একটি ফাংশন তৈরি করতে হবে, যা দুটি অ্যারের একটি জোড়া আর একটি সংখ্যা নেয় এবং সংখ্যাটি জোড় না বিজোড়, তার উপর নির্ভর করে সেটিকে সঠিক উপ-অ্যারেতে রাখে:
(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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।