इस समारोह पर विचार करें:क्या हास्केल ऑप्टिमाइज़र स्कोप में बार-बार फ़ंक्शन कॉल के लिए ज्ञापन का उपयोग करता है?
f as = if length as > 100 then length as else 100
के बाद से समारोह शुद्ध यह स्पष्ट है कि लंबाई दोनों कॉल में एक ही हो जाएगा। मेरा सवाल है कि हास्केल ऑप्टिमाइज़र उपर्युक्त कोड को निम्नलिखित के बराबर में बदल देता है?
f as =
let l = length as
in if l > 100 then l else 100
यदि ऐसा होता है, तो कौन सा स्तर सेटिंग इसे सक्षम बनाता है? अगर ऐसा नहीं होता है, तो क्यों? इस परिदृश्य में this answer में बताया गया है कि मेमोरी कचरा कारण नहीं हो सकता है, क्योंकि फ़ंक्शन निष्पादन समाप्त होने के साथ ही प्रारंभिक चर जारी हो जाता है।
कृपया ध्यान दें कि इस स्थानीय गुंजाइश की वजह से this question का डुप्लिकेट नहीं है, और इस तरह यह एक बिल्कुल भिन्न जवाब मिल सकता है।
इस समस्या के बावजूद, सीसीई के साथ ghc अधिक आक्रामक हो सकता है। आपके पास सीएसईईंग के मूल्य का आकार अनुमान होना चाहिए। एक साधारण अनुमान यह है कि आधार प्रकार लापरवाह स्थान लेते हैं। – augustss
@augustss सहमत। – kosmikus
'लंबाई [1 .. 1000000]> 0' एक सस्ता ऑपरेशन कैसा है? ">" का मूल्यांकन करने से पहले "लंबाई" वापस नहीं आना चाहिए?(Ghci में, जब मैं सूची के आकार को बढ़ाता हूं तो ऑपरेशन को धीमा कर दिया जाता है) –