Common Lisp-এ হ্যাশ টেবিল হলো অ্যাসোসিয়েটিভ ডেটা সংরক্ষণের ডেটা স্ট্রাকচার। এগুলো কী (key)-কে মানের সাথে ম্যাপ করে, যেখানে কী (key) এবং মান দুটোই যেকোনো অবজেক্ট হতে পারে। অন্য ভাষায় এই ধারণাটিকে ম্যাপ, ডিকশনারি বা হ্যাশ বলা হতে পারে।
make-hash-table ফাংশন দিয়ে হ্যাশ টেবিল তৈরি করা যায়।
(make-hash-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {10024AD2B3}>
(খেয়াল করুন, হ্যাশ টেবিল প্রিন্ট হলে যা দেখা যায় তা ইমপ্লিমেন্টেশন-নির্ভর, তাই আপনার REPL-এ তা ভিন্নভাবে দেখা যেতে পারে।)
হ্যাশ টেবিল থেকে কোনো কী (key) দিয়ে একটি মান পেতে আপনি gethash ফাংশন ব্যবহার করেন:
*h* ; => #<HASH-TABLE :TEST EQL :COUNT 3 {10024AD2B3}>`
(gethash :foo *h*) ; => :bar
; T
gethash একাধিক মান রিটার্ন করে, যা আরেকটি ধারণায় ব্যাখ্যা করা হবে।
হ্যাশ টেবিলে একটি মান যুক্ত করতে আপনি gethash-এর সাথে setf এভাবে ব্যবহার করেন:
(setf (gethash :foo *hash-table*) :bar) : => :bar
এটি *hash-table* হ্যাশ টেবিলে :foo কী (key)-এর মান :bar-এ পরিবর্তন করবে। এটি মানটি রিটার্ন করে।
setf-এর ব্যবহার আরেকটি ধারণায় ব্যাখ্যা করা হবে।
Lamont একটি Lisp ভিনগ্রহী, যে নিজের একটি ভিডিও গেম লিখতে চায়। এর মধ্যে একটি কাজে সে আপনার সাহায্য চেয়েছে, তা হলো একটি হাই স্কোর তালিকার হিসাব রাখা।
make-high-score-table নামের একটি ফাংশন ডিফাইন করুন, যেটি কোনো আর্গুমেন্ট নেয় না এবং একটি নতুন খালি হ্যাশ টেবিলে ইভ্যালুয়েট হয়:
(make-high-score-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {1005A90103}>
টেবিলে একজন প্লেয়ার যোগ করতে add-player নামের একটি ফাংশন ডিফাইন করুন, যেটি দুটি আর্গুমেন্ট নেয়:
প্লেয়ারের প্রাথমিক স্কোর শূন্য সেট করুন।
(add-player hash-table :louis) ; => 0
(add-player hash-table :lilly) ; => 0
একজন প্লেয়ারের স্কোর সেট করতে set-score নামের একটি ফাংশন ডিফাইন করুন, যেটি তিনটি আর্গুমেন্ট নেয়:
(set-score hash-table :louis 1234) ; => 1234
টেবিল থেকে একজন প্লেয়ারের স্কোর পেতে get-score নামের একটি ফাংশন ডিফাইন করুন, যেটি দুটি আর্গুমেন্ট নেয়:
এই ফাংশনটি প্লেয়ারের জন্য সংরক্ষিত স্কোরে ইভ্যালুয়েট হওয়া উচিত।
যদি সেই প্লেয়ারের জন্য কোনো স্কোর সংরক্ষিত না থাকে, অথবা সেই প্লেয়ার এখনো টেবিলে না থাকে, তাহলে 0 ইভ্যালুয়েট হবে।
(get-score hash-table :louis) ; => 1234
(get-score hash-table :lilly) ; => 0
(get-score hash-table :not-a-character-in-this-story) ; => 0
হাই স্কোর টেবিল থেকে একজন প্লেয়ার সরাতে remove-player নামের একটি ফাংশন ডিফাইন করুন, যেটি দুটি আর্গুমেন্ট নেয়:
এই ফাংশনটি এমন ক্ষেত্রগুলোও সুন্দরভাবে সামলাতে পারবে, যেখানে প্লেয়ারকে এখনো টেবিলে যোগ করা হয়নি। স্বাভাবিকভাবেই, একজন প্লেয়ার সরিয়ে ফেলার পর টেবিল থেকে তার স্কোর নিলে সেটি শূন্য হবে।
(set-score hash-table :louis 1234) ; => 1234
(remove-player hash-table :louis) ; => T
(get-score hash-table :louis) ; => 0
(remove-player hash-table :not-in-the-table) ; => NIL
Exercism-এ সাইন আপ করুন, Common Lisp ট্র্যাকের 27টি কনসেপ্ট92টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।