জিএইচসি কার্যাদি স্মরণ করে না।
এটি কোডে প্রদত্ত এক্সপ্রেশনটি একবারে একবারে তার আশেপাশের ল্যাম্বডা-এক্সপ্রেশনটি প্রবেশ করানো হয়েছে, বা এটি শীর্ষ পর্যায়ে থাকলে একবারে একবারে গণনা করে। ল্যাম্বডা-এক্সপ্রেশনগুলি কোথায় রয়েছে তা নির্ধারণ করা যখন আপনি উদাহরণ হিসাবে যেমন সিনট্যাকটিক চিনি ব্যবহার করেন তখন কিছুটা জটিল হতে পারে, সুতরাং আসুন এগুলি সমতুল্য ডিজুয়ার্ড সিনট্যাক্সে রূপান্তর করুন:
m1' = (!!) (filter odd [1..]) -- NB: See below!
m2' = \n -> (!!) (filter odd [1..]) n
(দ্রষ্টব্য: হাস্কেল 98 প্রতিবেদনে আসলে বাম অপারেটর বিভাগের (a %)সমতুল্য বর্ণনা করা হয়েছে \b -> (%) a b, তবে জিএইচসি এটির নকশা করে (%) aThese এগুলি প্রযুক্তিগতভাবে আলাদা কারণ এগুলি আলাদা করে চিহ্নিত করা যেতে পারে seqI আমি মনে করি আমি এই বিষয়ে কোনও জিএইচসি ট্র্যাকের টিকিট জমা দিয়েছি))
এই দেওয়া, আপনি যে দেখতে পাবেন m1'প্রকাশের filter odd [1..]কোনো ল্যামডা প্রকাশ অন্তর্ভুক্ত করা হয় না তাই এটি শুধুমাত্র আপনার প্রোগ্রামের রান প্রতি একবার নির্ণিত হবে যখন m2', filter odd [1..]প্রতিটি সময় ল্যামডা প্রকাশ প্রবেশ করানো হয় নির্ণিত হবে অর্থাত, প্রতিটি কল এm2' । এটি আপনি যে সময় দেখছেন তার মধ্যে পার্থক্য ব্যাখ্যা করে।
প্রকৃতপক্ষে, GHC- র কিছু সংস্করণ, নির্দিষ্ট অপ্টিমাইজেশান বিকল্পগুলির সাথে, উপরের বর্ণনাকে নির্দেশ করে তার চেয়ে বেশি মান ভাগ করবে। এটি কিছু পরিস্থিতিতে সমস্যাযুক্ত হতে পারে। উদাহরণস্বরূপ, ফাংশনটি বিবেচনা করুন
f = \x -> let y = [1..30000000] in foldl' (+) 0 (y ++ [x])
জিএইচসি লক্ষ্য করে যে yএটি নির্ভর করে xএবং এতে ফাংশনটি পুনর্লিখন করে না
f = let y = [1..30000000] in \x -> foldl' (+) 0 (y ++ [x])
এই ক্ষেত্রে, নতুন সংস্করণটি খুব কম দক্ষ কারণ এটি যেখানে yসঞ্চিত আছে সেখানে মেমরি থেকে প্রায় 1 গিগাবাইট পড়তে হবে , যখন মূল সংস্করণটি স্থির জায়গায় চলবে এবং প্রসেসরের ক্যাশে ফিট করবে। প্রকৃতপক্ষে, জিএইচসি 6.12.1 এর অধীনে, ফাংশনটি fপ্রায় দ্বিগুণ দ্রুত যখন অপটিমাইজেশন ছাড়াই সংকলিত হয় তার চেয়ে কম কম্পাইল করা হয় -O2।
seqএম 1 10000000)। কোনও অপ্টিমাইজেশন পতাকা নির্দিষ্ট না করা হলেও একটি পার্থক্য রয়েছে। এবং আপনার "এফ" এর উভয় প্রকারের উপায়ে অপ্টিমাইজেশন নির্বিশেষে সর্বাধিক 5356 বাইটের রেসিডেন্সি রয়েছে (উপায় যখন (ও -2 ব্যবহৃত হয় তখন কম মোট বরাদ্দ সহ)।