ম্যাপিং বলতে একটি সিকোয়েন্সের প্রতিটি এলিমেন্টের উপর একটি ফাংশন প্রয়োগ করে নতুন একটি সিকোয়েন্স তৈরি করাকে বোঝায়।
mapcar দিয়ে অবজেক্টের একটি অ্যারের উপর একটি ফাংশন ম্যাপ করা যায়
(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)
লক্ষ্য করুন, প্রথম আর্গুমেন্টটি হলো কল করার জন্য একটি ফাংশন।
#' হলো একটি ফাংশন নির্দিষ্ট করার বিশেষ কোটিং সিনট্যাক্স।
(এখানে 'double ব্যবহার করা যায়, তবে #' ব্যবহারই ইডিয়োম্যাটিক এবং এক অর্থে "আরও সঠিক"।)
ম্যাপিং কেবল একটি সিকোয়েন্সের উপর ফাংশন প্রয়োগ করার মধ্যেই সীমাবদ্ধ নয়, একাধিক সিকোয়েন্স নিয়েও করা যায়।
যদি N সংখ্যক সিকোয়েন্স দেওয়া হয়, তাহলে ফাংশনটিকে অবশ্যই N সংখ্যক আর্গুমেন্ট নিতে হবে।
(mapcar #'list '(1 2) '(a b) '("foo" "bar")) ; => ((1 a "foo") (2 b "bar"))
mapcar ছাড়াও অ্যারের উপর ম্যাপ করার আরও কিছু ফাংশন আছে।
mapcar নিঃসন্দেহে সবচেয়ে কমন, তবে বাকিগুলো সম্পর্কেও জানা ভালো।
maplist অনেকটা mapcar-এর মতো কাজ করে, তবে এলিমেন্টের বদলে একটার পর একটা সাবলিস্টের উপর কাজ করে।
প্রথমে পুরো অ্যারের উপর, তারপর cdr-এর উপর, তারপর তার cdr-এর উপর, এভাবে চলতে থাকে:
(maplist #'identity '(a b c)) ; => ((A B C) (B C) (C))
mapc ও mapl যথাক্রমে mapcar ও maplist-এর মতোই, তবে এরা ফলাফল সংগ্রহ করে না, বরং প্রথম অ্যারেটিই রিটার্ন করে।
এটি সাইড এফেক্ট তৈরি করা অপারেশনের জন্য ব্যবহৃত হয়।
mapcan ও mapcon যথাক্রমে mapcar ও maplist-এর মতো, তবে nconc ব্যবহার করে ফলাফলটি ফ্ল্যাট করা হয়। nconc append-এর মতোই, শুধু শেষ আর্গুমেন্ট ছাড়া বাকি সবগুলোর ক্ষেত্রে ধ্বংসাত্মক আচরণ করে।
ম্যাপিং কেবল অ্যারে-এর মধ্যেই সীমাবদ্ধ নয়। যেকোনো সিকোয়েন্সের উপরই (যা অন্য একটি কনসেপ্টে আলোচনা করা হয়েছে) ম্যাপ করা যায়।
অ্যারে ছাড়া অন্য সিকোয়েন্সের ক্ষেত্রে map ফাংশনটি ব্যবহার করা হয়।
map তিন বা তার বেশি আর্গুমেন্ট নেয়:
(map 'list #'double '(1 2 3)) ; => (2 4 6)
(map 'string #'char-upcase "foobar") ; => "FOOBAR"
একটি বিশেষ ক্ষেত্রে, ফলাফল সিকোয়েন্সের টাইপ হিসেবে nil দেওয়া হলে nil-ই রিটার্ন করা হয়।
এটি (উপরের mapc ও mapl-এর মতোই) সাইড এফেক্টের জন্য ব্যবহৃত হয়।