2014-08-31 4 views
6

हास्केल में, भेड़ के बच्चे को डब्ल्यूएचएनएफ में माना जाता है, जबकि अनुपयुक्त उपयोगकर्ता परिभाषित कार्य नहीं होते हैं। इस भेद के पीछे प्रेरणा क्या थी?हास्केल कमजोर हेड सामान्य फॉर्म (डब्ल्यूएचएनएफ) में लैम्ब्डा अबास्ट्रक्शन क्यों मानता है?

+1

ध्यान दें कि उस लिंक किए गए संभावित डुप्लिकेट में कुछ हद तक चर्चा की गई थी, जिसे डब्ल्यूएचएनएफ माना जाता है और जिसे कुछ समय के रूप में माना जाता है, के बीच भेद निश्चित रूप से कम समय में और बिना साइड इफेक्ट्स का मूल्यांकन करेगा * डब्ल्यूएचएनएफ कुछ मनमाने ढंग से निर्णय लेता है। –

उत्तर

9

अक्सर फ़ंक्शन को जानकारी संलग्न करने के लिए उपयोगी होता है जिसे आप कभी भी फ़ंक्शन का मूल्यांकन करने से पहले गणना करने की आवश्यकता होती है, लेकिन बाद में इन्हें आमंत्रण में साझा किया जा सकता है।

cleverFunction = \x -> simpleCombine x expensiveConstant 
where expensiveConstant = ... 
     simpleCombine x c = ... 

ध्यान दें कि हालांकि cleverFunction एक लैम्ब्डा के रूप में परिभाषित किया गया है, है ना WHNF में where ब्लॉक ((\l x -> ...) locBindings के लिए चीनी) की वजह से है।

किसी भी संलग्न गुंजाइश के बिना एक लैम्ब्डा, कोई चर कि पहले मंगलाचरण गणना की जा सकती (चर लैम्ब्डा में एक कॉल के लिए ही मान्य है, और कचरा-एकत्र बाद में कर रहे हैं) है यानी यह वास्तव में सामान्य रूप में पहले से ही है (एनएफ, न सिर्फ डब्ल्यूएचएनएफ)।

+0

यहां तक ​​कि \ x -> (1 + 1 :: इंटीजर) '? – immibis

+0

@immibis ... -? – leftaroundabout

+0

ऐसा लगता है कि लैम्ब्डा को – immibis

संबंधित मुद्दे