অলস মূল্যায়নের জন্য ধন্যবাদ, একটি হাস্কেল প্রোগ্রাম যা দেখায় তেমনটি করে না (প্রায়শই পারে না )।
এই প্রোগ্রামটি বিবেচনা করুন:
main = putStrLn (show (quicksort [8, 6, 7, 5, 3, 0, 9]))
উত্সাহী ভাষায়, প্রথমে quicksortদৌড়াতে হবে, তারপরে show, তারপর putStrLn। ফাংশনটি চলমান শুরু হওয়ার আগে কোনও ফাংশনের যুক্তি গণনা করা হয়।
হাস্কেলে, এটি বিপরীত। ফাংশনটি প্রথমে চলতে শুরু করে। ফাংশনটি আসলে তাদের ব্যবহার করলেই যুক্তিগুলি গণনা করা হয়। এবং একটি যৌগিক যুক্তি, তালিকার মতো, প্রতিটি টুকরোগুলি ব্যবহৃত হওয়ার সাথে সাথে এক সময় এক টুকরো গণনা করা হয়।
সুতরাং এই প্রোগ্রামে প্রথম যেটি ঘটে তা হ'ল putStrLnচলমান শুরু।
স্ট্রিংয়েরputStrLn আর্গুমেন্টের অক্ষরগুলিকে আউটপুট বাফারে অনুলিপি করে কাজটি GHC এর বাস্তবায়ন । কিন্তু যখন এটি এই লুপটি প্রবেশ করে, showএখনও চালানো হয়নি। সুতরাং, যখন এটি স্ট্রিং থেকে প্রথম চরিত্রটি অনুলিপি করে চলে যায়, হাস্কেল তার চরিত্রটি গণনা করার জন্য কলগুলির ভগ্নাংশটি মূল্যায়ন করে showএবং quicksortকল করে । তারপরে পরবর্তী চরিত্রে চলে আসে। সব তিনটি functions- সঞ্চালনের সুতরাং , , এবং - ইন্টারলিভড্ করা হয়। ক্রমহ্রাসমান কার্যকর করে , মূল্যহীন থাঙ্কগুলির একটি গ্রাফ রেখে যেখানে এটি রেখে গেছে তা মনে রাখে।putStrLnputStrLnshowquicksortquicksort
এখন আপনি যদি অন্য কোনও প্রোগ্রামিং ভাষার সাথে পরিচিত হন, তবে আপনি জানেন তবে আপনি যা আশা করতে পারেন তার চেয়ে এটি ভিন্নভাবে। quicksortমেমরি অ্যাক্সেস বা এমনকি তুলনার ক্রমের ক্ষেত্রে হাস্কেলের মধ্যে আসলে কী আচরণ করে তা কল্পনা করা সহজ নয় । আপনি যদি কেবল আচরণটি পর্যবেক্ষণ করতে পারতেন, এবং সোর্স কোডটি না, আপনি এটি কোয়েস্কর্ট হিসাবে কী করছেন তা আপনি চিনতে পারবেন না ।
উদাহরণস্বরূপ, কুইকোর্টের পার্টিশনের সি সংস্করণ প্রথম পুনরাবৃত্তির কল হওয়ার আগে সমস্ত ডেটা দেয়। হাস্কেল সংস্করণে, প্রথম পার্টিশনটি শেষ হওয়ার আগে ফলাফলের প্রথম উপাদানটি গণনা করা হবে (এবং আপনার পর্দায় প্রদর্শিত হতে পারে) - আসলে কোনও কাজ শেষ হওয়ার আগেইgreater ।
পিএস হ্যাসেল কোডটি আরও চিকুইসোর্ট-এর মতো হবে যদি এটি কোয়িকোর্টের মতো একই সংখ্যার তুলনা করে; লিখিত হিসাবে কোড দ্বিগুণ তুলনা করতে পারে কারণ lesserএবং greaterতালিকার মাধ্যমে দুটি লিনিয়ার স্ক্যান করে স্বতন্ত্রভাবে গণনা করা নির্দিষ্ট করা হয়েছে। অতিরিক্ত তুলনা দূর করার জন্য কম্পাইলারটি যথেষ্ট স্মার্ট হওয়ার জন্য এটি নীতিগতভাবেই সম্ভব; অথবা কোডটি ব্যবহারের জন্য পরিবর্তন করা যেতে পারে Data.List.partition।
পিপিএস হ্যাস্কেল অ্যালগরিদমগুলির সর্বোত্তম উদাহরণ যা আপনি প্রত্যাশা করেছিলেন তা আচরণ না করার জন্য পরিণত হয়েছে তা হল কম্পিউটিং প্রাইমগুলির জন্য ইরোটোথিনিসের চালনী ।