জিএইচসি কার্যাদি স্মরণ করে না।
এটি কোডে প্রদত্ত এক্সপ্রেশনটি একবারে একবারে তার আশেপাশের ল্যাম্বডা-এক্সপ্রেশনটি প্রবেশ করানো হয়েছে, বা এটি শীর্ষ পর্যায়ে থাকলে একবারে একবারে গণনা করে। ল্যাম্বডা-এক্সপ্রেশনগুলি কোথায় রয়েছে তা নির্ধারণ করা যখন আপনি উদাহরণ হিসাবে যেমন সিনট্যাকটিক চিনি ব্যবহার করেন তখন কিছুটা জটিল হতে পারে, সুতরাং আসুন এগুলি সমতুল্য ডিজুয়ার্ড সিনট্যাক্সে রূপান্তর করুন:
m1' = (!!) (filter odd [1..]) -- NB: See below!
m2' = \n -> (!!) (filter odd [1..]) n
(দ্রষ্টব্য: হাস্কেল 98 প্রতিবেদনে আসলে বাম অপারেটর বিভাগের (a %)
সমতুল্য বর্ণনা করা হয়েছে \b -> (%) a b
, তবে জিএইচসি এটির নকশা করে (%) a
These এগুলি প্রযুক্তিগতভাবে আলাদা কারণ এগুলি আলাদা করে চিহ্নিত করা যেতে পারে seq
I আমি মনে করি আমি এই বিষয়ে কোনও জিএইচসি ট্র্যাকের টিকিট জমা দিয়েছি))
এই দেওয়া, আপনি যে দেখতে পাবেন 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 ব্যবহৃত হয় তখন কম মোট বরাদ্দ সহ)।