কেন হাস্কেল এটিকে সাধারণ লাইব্রেরির ক্রিয়াকলাপ হিসাবে সংজ্ঞায়িত না করে "যদি / তারপরে / অন্যথায়" অন্তর্নির্মিত থাকে?


25

কেন সাধারণ লাইব্রেরির ক্রিয়াকলাপ না করে হাস্কেলের একটি অন্তর্নির্মিত নকশাগুলি থাকে if/then/elseযা Boolধরণের উপর নির্ভর করে ? যেমন

if :: Bool -> a -> a -> a
if True  x _ = x
if False _ y = y

4
আমি অনুমান করব যে তারা স্পষ্টতই যদি / তারপর / অন্য বাক্য গঠন চায় যা তারা মেশা ফিক্স ফাংশন ছাড়াই পেতে পারে না যেমন তারা এগডায় আছে। আপনি যে ফাংশনটির কথা উল্লেখ করেছেন তা কাঠামোগত হিসাবে কাঠামোযুক্ত, যা আপনি নিজেকে প্রয়োগ করতে পেরেছিলেন যদিও আমি অনুমান করি যে তারা যদি আমাদের / তবে / অন্য চিনি দেয় (সম্ভবত এটি কেবল কোনও মামলার জন্য চিনি) কেবল কারণ তারা পারে এবং এটি ক্ষতিকারক নয় .. তবে আমার কিছুই নেই আমাকে এখানে ব্যাক আপ করতে, এই কারণেই আমি এটি একটি মন্তব্যে লিখছি।
জিমি হোফা

10
এটি বেশিরভাগ পাঠকের কাছেই সুস্পষ্ট হতে পারে, তবে আমি উল্লেখ করতে চাই যে /f / তারপর / অন্যথায় একটি অনুষ্ঠান হিসাবে উত্সাহী ভাষায় (যেমন স্কিম বা এসএমএল) উপযুক্ত সমাধান হতে পারে না যদিও এটি অলসতার ক্ষেত্রে যুক্তিসঙ্গত হয় is হাস্কেলের মতো ভাষা।
জর্জিও

উত্তর:


24

এটা চমৎকার চিনি বিশুদ্ধরূপে জন্য if, thenএবং elseকীওয়ার্ড; প্রকৃতপক্ষে, জিএইচসি ( RebindableSyntaxএক্সটেনশান সক্ষম হওয়া সহ) সিন্থ্যাক্সটি যে কোনও ifThenElseফাংশনের সুযোগে কেবল কল করেই সিনট্যাক্সটি তৈরি করবে ।


6

এটি খুব বেশি গুরুত্ব দেয় না ... আমার কাছে দেখে মনে হচ্ছে যদি / তবে / আজকাল খুব বেশি ব্যবহৃত হয় না। আমি নিজেকে প্যাটার্ন গার্ডদের লিখতে দেখি যদি ইনস্টড অফ .. তবে .. অন্যথায়।

সিন্টেক্সিক দৃষ্টিকোণ থেকে, যদিও এটি ভাল লাগছে

if expr1 then expr2 else expr3

সুতরাং আপনি লিখতে পারেন

if foo a then bar b else baz c

পরিবর্তে

if (foo a) (bar b) (baz c)

যা আমার কাছে কিছুটা LISPish লাগে।

শব্দার্থক বিশ্লেষণ এবং কোড জেনারেশনের জন্য, এই নির্মাণটি ভাল লাগছে, যা সহজেই দক্ষ মেশিন কোডে সংকলন করা যায়। নোট করুন যে কোডটি সেই অংশটি এড়িয়ে যেতে পারে যা শাখার কাছে যে অংশটি পৌঁছায় না তার পক্ষে কলঙ্ক তৈরি করে, কোনও ফাংশন কলের বিপরীতে, যেখানে (অব্যক্ত) প্যারামিটারগুলি সমস্ত পাস করতে হবে। তবে থঙ্কটি তৈরি করতে সময় (এবং স্মৃতি, এটি পরে পুনরুদ্ধার করতে হবে) এরও ব্যয় হয়। এটিতে ভাল করতে, যদি কোনও জায়গায় আইফোনটি ইনলাইন করতে হয়।


3
আমি মনে করি না যে ইনলাইনিংটি একটি আসল সমস্যা। আমার বোধগম্যতা হ'ল জিএইচসি ইতিমধ্যে ছোট ফাংশনগুলি ইনলাইন করার ক্ষেত্রে ব্যতিক্রমীভাবে ভাল, কারণ এটি হাস্কেলের মধ্যে কেবল এই জাতীয় প্যাটার্ন।
টিখন জেলভিস

1
@ টিখন জেলভিস শিওর, তবে / যদি / অন্যথায় আপনার কোনও বিশেষ ক্রিয়াকলাপের দরকার নেই যা অবশ্যই সর্বদা অন্তর্ভুক্ত থাকে। এমনকি আপনার একটি ইনলাইনিং পাসের প্রয়োজন নেই এবং এখনও আপনি শালীন কোড তৈরি করতে পারেন। সমস্ত বিশ্ব জিএইচসি নয়।
এঙ্গো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.