আপনি হাস্কেল বা অন্যান্য কার্যকরী প্রোগ্রামিং ভাষাগুলিতে কীভাবে প্রোগ্রামগুলি ডিজাইন করেন?


52

সি # বা রুবির মতো অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজে আমার কিছু অভিজ্ঞতা আছে। আমি জানি কীভাবে কোনও বস্তু ওরিয়েন্টেড স্টাইলে একটি প্রোগ্রাম ডিজাইন করা যায়, ক্লাস এবং অবজেক্টগুলি কীভাবে তৈরি করা যায় এবং কীভাবে তাদের মধ্যে সম্পর্কের সংজ্ঞা দেওয়া যায়। আমি কিছু নকশা নিদর্শন জানি।

লোকেরা কীভাবে কার্যকরী প্রোগ্রাম লিখতে পারে? তারা কিভাবে শুরু করবেন? কার্যকরী ভাষার জন্য ডিজাইনের নিদর্শন রয়েছে? চূড়ান্ত প্রোগ্রামিং বা চতুর বিকাশের মতো পদ্ধতিগুলি কি কার্যকরী ভাষার জন্য প্রযোজ্য?


1
সংশ্লিষ্ট প্রশ্ন: stackoverflow.com/questions/3077866/...
HaskellElephant

উত্তর:


24

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

লোকেরা কীভাবে কার্যকরী প্রোগ্রাম লিখতে পারে? তারা কিভাবে শুরু করবেন?

ফাংশন লিখে। আপনি যখন ফাংশনাল প্রোগ্রামিং করছেন, আপনি হয় লিখছেন main, বা আপনি কোনও সহায়ক ফাংশন লিখছেন। কখনও কখনও আপনার মূল লক্ষ্য হতে পারে এটিতে পরিচালিত বিভিন্ন প্রাসঙ্গিক ফাংশন সহ একটি ডেটা টাইপ লিখে।

কার্যনির্বাহী প্রোগ্রামিং উভয় উপরে ডাউন এবং নীচে আপ পদ্ধতির জন্য খুব ভাল। হাস্কেল উচ্চ-স্তরের ভাষায় আপনার প্রোগ্রামগুলি লেখার জন্য দৃ strongly়ভাবে উত্সাহ দেয় এবং তারপরে কেবলমাত্র আপনার উচ্চ-স্তরের ডিজাইনের বিশদটি সংজ্ঞায়িত করে। দেখুন minimumউদাহরণস্বরূপ:

minimum    :: (Ord a) => [a] -> a
minimum xs =  foldl1 min xs

একটি তালিকার ক্ষুদ্রতম উপাদান সন্ধানের ফাংশনটি কেবলমাত্র "সংযোজক" বা বর্তমান ন্যূনতম মানের সাথে প্রতিটি উপাদানকে তুলনা করতে ন্যূনতম ফাংশনটি ব্যবহার করে কেবল তালিকার উপরে একটি ট্র্যাভার্সাল হিসাবে লেখা হয়।

কার্যকরী ভাষার জন্য ডিজাইনের নিদর্শন রয়েছে?

দুটি জিনিস যা "নকশার নকশাগুলি", ইমো, উচ্চতর অর্ডার ফাংশন এবং মনডের সাথে সমান হতে পারে । প্রাক্তন সম্পর্কে কথা বলা যাক। হাই-অর্ডার ফাংশনগুলি হ'ল ফাংশন যা হয় অন্য ফাংশনগুলিকে ইনপুট হিসাবে গ্রহণ করে অথবা আউটপুট হিসাবে ফাংশন উত্পাদন করে। কোন কার্মিক ভাষা সাধারণত প্রচুর ব্যবহার করে map, filterএবংfold(ভাঁজকে প্রায়শই "হ্রাস" বলা হয়): তিনটি খুব বেসিক উচ্চ-অর্ডার ফাংশন যা বিভিন্ন উপায়ে তালিকায় কোনও ফাংশন প্রয়োগ করে। এগুলি সুন্দর উপায়ে লুপগুলির জন্য বয়লারপ্লেট প্রতিস্থাপন করে। প্যারামিটার হিসাবে ফাংশনগুলি পাস করা প্রোগ্রামিংয়ের জন্য একটি অত্যন্ত শক্তিশালী वरदान; উচ্চতর অর্ডার ফাংশনগুলি ব্যবহার করে, আপনার নিজের তৈরি করতে সক্ষম হতে এবং কার্যকর কার্যকরী পূর্ণ শক্তিশালী স্ট্যান্ডার্ড লাইব্রেরিটি অর্জন করতে সক্ষম হয়ে প্রচুর "নকশার ধরণগুলি" সহজসাধ্যভাবে সম্পাদন করা যায়।

মনডস হ'ল "ভয়ঙ্কর" বিষয়। তবে তারা আসলে তেমন ভীতিকর নয়। মনাদদের কথা ভাবার আমার প্রিয় উপায় হ'ল সেগুলি কোনও বুদবুদে কোনও ক্রিয়াকলাপকে ঘেঁটে দেওয়া এবং সেই ফাংশনটিকে পরাশক্তি দেওয়া (যা কেবল বুদ্বুদের অভ্যন্তরে কাজ করে) দেয় as আমি বিশদভাবে বলতে পারি, তবে পৃথিবীর আর একটি মনড উপমা প্রয়োজন নেই। সুতরাং আমি দ্রুত উদাহরণগুলিতে সরানো হবে। মনে করুন আমি একটি অবিজ্ঞানী "ডিজাইনের ধরণ" ব্যবহার করতে চাই। আমি একই সাথে বিভিন্ন বিভিন্ন ইনপুটগুলির জন্য একই গণনা চালাতে চাই। আমি কেবল একটি ইনপুট বেছে নিতে চাই না, আমি সেগুলি সবই বেছে নিতে চাই। যে তালিকা monad হবে:

allPlus2 :: [Int] -> [Int]
allPlus2 xs = do x <- xs
                 return (x + 2)

এখন, এটি সম্পাদন করার মূio় উপায়টি আসলে map, তবে উদাহরণের জন্য, আপনি কী দেখতে পাচ্ছেন যে তালিকা মোনাড আমাকে এমন একটি ফাংশন লিখতে মঞ্জুরি দিয়েছে যা দেখে মনে হয় এটি একটি মূল্যের উপর নির্ভর করে, তবে পরাশক্তি দিয়ে এটি প্রতিটি উপাদানগুলিতে কাজ করার ক্ষমতা দিয়েছিল super একটি তালিকা? অন্যান্য পরাশক্তিগুলির মধ্যে রয়েছে ব্যর্থতা, রাষ্ট্র, "বাইরের বিশ্বের" সাথে যোগাযোগ এবং সমান্তরাল সম্পাদন। এই পরাশক্তিগুলি খুব শক্তিশালী এবং বেশিরভাগ প্রোগ্রামিং ভাষাগুলি পরাশক্তিগুলির সাথে ফাংশনকে চারদিকে ছড়িয়ে দেওয়ার অনুমতি দেয়। বেশিরভাগ লোক বলে যে হাস্কেল এই পরাশক্তিগুলিকে একেবারেই অনুমতি দেয় না, তবে সত্যই, হাস্কেল কেবল এগুলিকে মোনাডে ধারণ করে যাতে তাদের প্রভাব সীমিত এবং পর্যবেক্ষণ করা যায়।

tl; ডাঃ গ্রুক্কিং উচ্চতর অর্ডার ফাংশন এবং মনডস হ্যাশকেল গ্রুকিং ডিজাইনের নিদর্শনগুলির সমতুল্য। একবার আপনি এই হ্যাস্কেল ধারণাগুলি শিখলে, আপনি "নকশার ধরণগুলি" হাস্কেলের শক্তি অনুকরণ করার জন্য বেশিরভাগ সস্তার কাজ হিসাবে বিবেচনা শুরু করেন।

চূড়ান্ত প্রোগ্রামিং বা চতুর বিকাশের মতো পদ্ধতিগুলি কি কার্যকরী ভাষার জন্য প্রযোজ্য?

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


"আমি বিশদভাবে বলতে পারতাম, তবে বিশ্বের আর একটি মনড উপমা প্রয়োজন নেই।" - আমাদের সবসময় মনাদের জন্য আরও উপমা প্রয়োজন এবং আপনার দেখা আমার মধ্যে অন্যতম সেরা।
অ্যাডাম জেন্ট

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