আমি আমার উত্তরটি মূলত হাস্কেলের কথা মাথায় রেখেই লিখি, যদিও অনেকগুলি ধারণা অন্যান্য কার্যকরী ভাষাগুলি যেমন এরলং, লিস্প (এম) এবং এমএল তে সমানভাবে প্রয়োগ করে। কেউ কেউ রুবি, পাইথন, পার্ল এবং জাভাস্ক্রিপ্টে (কিছু পরিমাণে) প্রয়োগও করে।
লোকেরা কীভাবে কার্যকরী প্রোগ্রাম লিখতে পারে? তারা কিভাবে শুরু করবেন?
ফাংশন লিখে। আপনি যখন ফাংশনাল প্রোগ্রামিং করছেন, আপনি হয় লিখছেন 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 মধ্যে একটি বড় সমস্যা ভঙ্গ, তাই ক্ষুদ্র-মাইলস্টোন সহজলভ্য হওয়া উচিত। আপনার লেখা ফাংশনগুলির বিষয়ে বৈশিষ্ট্য যাচাই বা প্রমাণ করার জন্য কুইকচেক এবং জেনোর মতো সরঞ্জাম রয়েছে।