आलसी मूल्यांकन पूरी तरह से कार्यात्मक प्रोग्रामिंग भाषाओं की 'आम जीत प्रदर्शन' की एक आम संपत्ति है, यह काफी सरल काम करता है, आप केवल एक बार अभिव्यक्ति का मूल्यांकन करते हैं। उदाहरण के लिए, हास्केल
if x == 1 then x + 3 else x + 2
में विचार सख्त (उत्सुक) मूल्यांकन में, अगर एक्स वास्तव में बराबर दो, तो x + 3 का मूल्यांकन किया और दिया जाता है, और एक्स + 2 है, हास्केल में, ऐसी कोई बात नहीं होता है, x + 3 बस, अभिव्यक्ति पर्यत बना है उदाहरण के लिए, कहते हैं कि मेरे पास है:
let x = if x == 1 then x + 3 else x + 2
ठीक है, तो मैं स्टोर है कि एक चर में है, लेकिन क्या हुआ अगर मैं कभी नहीं कभी कभी कभी कुछ अन्य सशर्त, की वजह से है कि चर का उपयोग हम्म? मैंने कुछ भी नहीं के लिए अपने सीपीयू पर एक बहुत ही महंगा पूर्णांक जोड़ा बर्बाद कर दिया। (ठीक है, प्रैक्टिस में आप इस पर जीत नहीं पाते हैं लेकिन आपको बड़े भाव के साथ विचार मिलता है)
फिर सवाल उठता है, क्यों नहीं भाषा आलसी हैं ?, ठीक है, सरल कारण यह है कि पूरी तरह से कार्यात्मक भाषाओं, अभिव्यक्तियों को कोई दुष्प्रभाव नहीं होने की गारंटी है। अगर उनके पास होता, तो हमें उन्हें सही क्रम में मूल्यांकन करना होगा। यही कारण है कि ज्यादातर भाषाओं में उनका उत्सुक मूल्यांकन किया जाता है। उन भाषाओं में जहां अभिव्यक्तियों का कोई साइड इफेक्ट नहीं होता है, आलसी मूल्यांकन में कोई जोखिम नहीं होता है, इसलिए यह अन्य क्षेत्र में खोने वाले प्रदर्शन को वापस जीतने के लिए एक तार्किक विकल्प है।
एक और दिलचस्प दुष्प्रभाव यह है कि यदि हास्केल में वास्तव में Bool -> a -> a -> a
प्रकार का कार्य है। हास्केल में इसका मतलब है कि यह किसी भी प्रकार का दूसरा, बूलियन प्रकार का एक तर्क लेता है, पहले जैसा ही होता है, और उस प्रकार को फिर से देता है। आप अलग-अलग नियंत्रण शाखाओं के अनंत मूल्यांकन में भाग नहीं लेते हैं क्योंकि मूल्यों का मूल्यांकन केवल तब किया जाता है जब उनकी आवश्यकता होती है, जो आमतौर पर कार्यक्रम के अंत में होती है जब एक बड़ी अभिव्यक्ति की रचना की जाती है और फिर अंतिम परिणाम के लिए मूल्यांकन किया जाता है, अंतिम परिणाम के लिए संकलक सोचने की सभी चीजों की आवश्यकता नहीं है। उदाहरण के लिए यदि मैं स्वयं द्वारा एक विशाल जटिल अभिव्यक्ति को विभाजित करता हूं, तो इसे दोनों भागों के मूल्यांकन के बिना '1' के लिए प्रतिस्थापित किया जा सकता है।
अंतर योजना, जो परंपरागत रूप से सख्ती से मूल्यांकन किया जाता है में दिख रहा है, लेकिन वहाँ एक आलसी संस्करण लेज़ी योजना कहा जाता है, योजना (display (apply if (> x y) "x is larger than y" "x is not larger than y"))
में कोई त्रुटि है क्योंकि if
एक समारोह नहीं है, यह एक विशेष वाक्य रचना है (कुछ लोगों का कहना है, हालांकि वाक्य रचना है योजना में विशेष नहीं है) क्योंकि यह आवश्यक रूप से अपने सभी तर्कों का मूल्यांकन नहीं करता है, अन्यथा अगर हम उदाहरण के लिए एक फैक्टोरियल की गणना करने की कोशिश करते हैं तो हम स्मृति से बाहर निकल जाएंगे। आलसी योजना में जो ठीक काम करता है क्योंकि उन तर्कों में से कोई भी मूल्यांकन तब तक मूल्यांकन नहीं किया जाता है जब तक किसी फ़ंक्शन को प्रदर्शन जारी रखने के परिणाम की आवश्यकता नहीं होती है, जैसे प्रदर्शन।
डाउन-वोट के लिए एक टिप्पणी? – Earlz
आप यहां कई सारे प्रश्न पूछ रहे हैं: 1) आलसी मूल्यांकन के लाभ, 2) प्रदर्शन, 3) इसका कार्यान्वयन कैसे किया जाता है। मैं इन्हें 3 अलग-अलग प्रश्नों में विभाजित करने की अनुशंसा करता हूं। – Juliet