কেন সাধারণ লাইব্রেরির ক্রিয়াকলাপ না করে হাস্কেলের একটি অন্তর্নির্মিত নকশাগুলি থাকে if/then/else
যা Bool
ধরণের উপর নির্ভর করে ? যেমন
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
কেন সাধারণ লাইব্রেরির ক্রিয়াকলাপ না করে হাস্কেলের একটি অন্তর্নির্মিত নকশাগুলি থাকে if/then/else
যা Bool
ধরণের উপর নির্ভর করে ? যেমন
if :: Bool -> a -> a -> a
if True x _ = x
if False _ y = y
উত্তর:
এটা চমৎকার চিনি বিশুদ্ধরূপে জন্য if
, then
এবং else
কীওয়ার্ড; প্রকৃতপক্ষে, জিএইচসি ( RebindableSyntax
এক্সটেনশান সক্ষম হওয়া সহ) সিন্থ্যাক্সটি যে কোনও ifThenElse
ফাংশনের সুযোগে কেবল কল করেই সিনট্যাক্সটি তৈরি করবে ।
এটি খুব বেশি গুরুত্ব দেয় না ... আমার কাছে দেখে মনে হচ্ছে যদি / তবে / আজকাল খুব বেশি ব্যবহৃত হয় না। আমি নিজেকে প্যাটার্ন গার্ডদের লিখতে দেখি যদি ইনস্টড অফ .. তবে .. অন্যথায়।
সিন্টেক্সিক দৃষ্টিকোণ থেকে, যদিও এটি ভাল লাগছে
if expr1 then expr2 else expr3
সুতরাং আপনি লিখতে পারেন
if foo a then bar b else baz c
পরিবর্তে
if (foo a) (bar b) (baz c)
যা আমার কাছে কিছুটা LISPish লাগে।
শব্দার্থক বিশ্লেষণ এবং কোড জেনারেশনের জন্য, এই নির্মাণটি ভাল লাগছে, যা সহজেই দক্ষ মেশিন কোডে সংকলন করা যায়। নোট করুন যে কোডটি সেই অংশটি এড়িয়ে যেতে পারে যা শাখার কাছে যে অংশটি পৌঁছায় না তার পক্ষে কলঙ্ক তৈরি করে, কোনও ফাংশন কলের বিপরীতে, যেখানে (অব্যক্ত) প্যারামিটারগুলি সমস্ত পাস করতে হবে। তবে থঙ্কটি তৈরি করতে সময় (এবং স্মৃতি, এটি পরে পুনরুদ্ধার করতে হবে) এরও ব্যয় হয়। এটিতে ভাল করতে, যদি কোনও জায়গায় আইফোনটি ইনলাইন করতে হয়।