Clojure-এ বুলিয়ান মান true বা false দিয়ে প্রকাশ করা হয়।
প্রেডিকেট ফাংশনগুলো (যে ফাংশনগুলো বুলিয়ান রিটার্ন করে) সাধারণত একটি প্রশ্নবোধক চিহ্ন (?) দিয়ে শেষ হয়, তবে এটি শুধু প্রচলিত রীতি।
কোর লাইব্রেরিতে not, and এবং or-এর মতো লজিক্যাল অপারেটরগুলোর জন্য ফাংশন রয়েছে।
এই অনুশীলনীতে আপনি একটি নতুন RPG গেমের কোয়েস্ট লজিক তৈরি করবেন, যেটি এক বন্ধু বানাচ্ছে। গেমটির মূল চরিত্র Annalyn, এক সাহসী মেয়ে, যার আছে একটি দুর্দান্ত ও বিশ্বস্ত পোষা কুকুর। দুর্ভাগ্যবশত বিপর্যয় নেমে আসে: বনের মধ্যে ফল খুঁজতে গিয়ে তার প্রিয় বন্ধুকে অপহরণ করা হয়েছে। Annalyn তার বন্ধুকে খুঁজে উদ্ধার করার চেষ্টা করবে, আর চাইলে এই কোয়েস্টে তার কুকুরটিকেও সঙ্গে নিয়ে যাবে।
কিছু সময় ধরে পথ অনুসরণ করার পর, Annalyn সেই শিবির খুঁজে পায় যেখানে তার বন্ধুকে বন্দী করে রাখা হয়েছে। দেখা যায়, অপহরণকারী দুজন: এক পরাক্রমশালী নাইট আর এক চতুর তিরন্দাজ।
অপহরণকারীদের খুঁজে পাওয়ার পর Annalyn ভেবে দেখে, নিচের কোন কোন কাজ সে করতে পারে:
আপনার চারটি কাজ: বনের তিনটি চরিত্রের অবস্থা এবং Annalyn-এর পোষা কুকুর উপস্থিত আছে কি না, তার ভিত্তিতে উপরের কাজগুলো করা সম্ভব কি না তা নির্ণয় করার লজিক তৈরি করা।
can-fast-attack? ফাংশনটি তৈরি করুন, যা একটি বুলিয়ান মান নেয় এবং তা নির্দেশ করে নাইট জেগে আছে কি না। নাইটের অবস্থার ভিত্তিতে দ্রুত আক্রমণ করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
can-spy? ফাংশনটি তৈরি করুন, যা তিনটি বুলিয়ান মান নেয় এবং যথাক্রমে নাইট, তিরন্দাজ ও বন্দী জেগে আছে কি না তা নির্দেশ করে। তিনটি চরিত্রের অবস্থার ভিত্তিতে দলটির উপর গুপ্তচরবৃত্তি করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
can-signal-prisoner? ফাংশনটি তৈরি করুন, যা দুটি বুলিয়ান মান নেয় এবং যথাক্রমে তিরন্দাজ ও বন্দী জেগে আছে কি না তা নির্দেশ করে। দুটি চরিত্রের অবস্থার ভিত্তিতে বন্দীকে সংকেত পাঠানো সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
can-free-prisoner? ফাংশনটি তৈরি করুন, যা চারটি বুলিয়ান মান নেয়। প্রথম তিনটি প্যারামিটার নির্দেশ করে যথাক্রমে নাইট, তিরন্দাজ ও বন্দী জেগে আছে কি না। শেষ প্যারামিটারটি নির্দেশ করে Annalyn-এর পোষা কুকুর উপস্থিত আছে কি না। তিনটি চরিত্রের অবস্থা ও Annalyn-এর পোষা কুকুরের উপস্থিতির ভিত্তিতে বন্দীকে মুক্ত করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)
(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Exercism-এ সাইন আপ করুন, Clojure ট্র্যাকের 12টি কনসেপ্ট105টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।