WhatAmIDoing higher-order function है क्योंकि यह एक ऐसा फ़ंक्शन है जो एक और फ़ंक्शन देता है।
जो चीज वह लौटाती है वह thunk — वास्तविक मूल्य की देरी गणना के लिए बनाई गई एक बंद है। आमतौर पर थंक्स को अभिव्यक्ति का मूल्यांकन करने के लिए बनाया जाता है (और संभवतः इसे याद किया जाता है), लेकिन अन्य मामलों में, "constantly 5
" के मामले में, एक बेयर वैल्यू के स्थान पर एक फ़ंक्शन की आवश्यकता होती है, जो कुछ भाषाओं में एक फ़ंक्शन देता है हमेशा रिटर्न 5.
उत्तरार्द्ध दिए गए उदाहरण में लागू हो सकता है, क्योंकि आवेदक-आदेश में भाषा मूल्यांकन का अनुमान लगाया जाता है (यानी फ़ंक्शन को कॉल करने से पहले तर्कों का मूल्यांकन करता है), फ़ंक्शन किसी फ़ंक्शन में मूल्यों को चालू करने के बजाय कोई अन्य उद्देश्य नहीं देता है जो उन्हें वापस देता है।
व्हाटएमिडॉइंग वास्तव में "लगातार" फ़ंक्शन का कार्यान्वयन है जिसका मैं वर्णन कर रहा था। लेकिन सामान्य रूप से, आपको आंतरिक फ़ंक्शन में केवल args
वापस नहीं करना पड़ता है। आप "ackermann(args)
" लौटा सकता है, जो एक लंबे समय ले सकता है, के रूप में ...
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
लेकिन WhatAmIDoing2 तुरंत वापसी होगी क्योंकि एकरमैन फंक्शन का मूल्यांकन एक closure में निलंबित किया जाएगा। (हाँ, यहां तक कि कॉल-बाय-वैल्यू भाषा में भी।)
स्रोत
2009-01-14 13:33:53
मुझे नहीं लगता कि मैं इसे एक पैटर्न फोन होता है, किसी भी तुलना में अगर बयान एक पैटर्न रहे हैं और अधिक। एक पैटर्न आमतौर पर एक विशिष्ट समस्या हल करता है। यह सिर्फ एक सुंदर मौलिक भाषा निर्माण है। आपके पास अभी एक उच्च-आदेश फ़ंक्शन है जो बंद हो जाता है। – jalf
संदर्भ क्या है? और हम इस कोड के बारे में कितना बात कर रहे हैं? क्या यह केवल आंतरिक कार्य बाहरी में परिभाषित चरों तक पहुंचने में सक्षम है? यह सिर्फ एक बंद है। या यह है कि आप नेस्टेड कार्यों को वापस करने में सक्षम हैं? यह सिर्फ उच्च-आदेश कार्यों की एक संपत्ति है। – jalf