6

जब मैं इस समारोह की आवश्यकता में आया तो मैं कुछ कार्यात्मक प्रोग्रामिंग के साथ बेवकूफ़ बना रहा था, हालांकि मुझे नहीं पता कि इस तरह की चीज़ मानक नामकरण में क्या कहा जाता है। कोई भी इसे पहचानता है?यह कार्यात्मक "पैटर्न" क्या कहा जाता है?

function WhatAmIDoing(args...) 
    return function() 
     return args 
    end 
end 

संपादित करें: समारोह सामान्यीकृत, यह एक चर (या शायद एक अंतर्निहित सूची) तर्कों की राशि लेता है और एक फ़ंक्शन है कि जब रिटर्न लागू सभी आर्ग, एक करी या अचार की तरह कुछ है, लेकिन यह ऐसा प्रतीत नहीं होता है।

+0

मुझे नहीं लगता कि मैं इसे एक पैटर्न फोन होता है, किसी भी तुलना में अगर बयान एक पैटर्न रहे हैं और अधिक। एक पैटर्न आमतौर पर एक विशिष्ट समस्या हल करता है। यह सिर्फ एक सुंदर मौलिक भाषा निर्माण है। आपके पास अभी एक उच्च-आदेश फ़ंक्शन है जो बंद हो जाता है। – jalf

+0

संदर्भ क्या है? और हम इस कोड के बारे में कितना बात कर रहे हैं? क्या यह केवल आंतरिक कार्य बाहरी में परिभाषित चरों तक पहुंचने में सक्षम है? यह सिर्फ एक बंद है। या यह है कि आप नेस्टेड कार्यों को वापस करने में सक्षम हैं? यह सिर्फ उच्च-आदेश कार्यों की एक संपत्ति है। – jalf

उत्तर

10

WhatAmIDoing higher-order function है क्योंकि यह एक ऐसा फ़ंक्शन है जो एक और फ़ंक्शन देता है।

जो चीज वह लौटाती है वह thunk — वास्तविक मूल्य की देरी गणना के लिए बनाई गई एक बंद है। आमतौर पर थंक्स को अभिव्यक्ति का मूल्यांकन करने के लिए बनाया जाता है (और संभवतः इसे याद किया जाता है), लेकिन अन्य मामलों में, "constantly 5" के मामले में, एक बेयर वैल्यू के स्थान पर एक फ़ंक्शन की आवश्यकता होती है, जो कुछ भाषाओं में एक फ़ंक्शन देता है हमेशा रिटर्न 5.

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

व्हाटएमिडॉइंग वास्तव में "लगातार" फ़ंक्शन का कार्यान्वयन है जिसका मैं वर्णन कर रहा था। लेकिन सामान्य रूप से, आपको आंतरिक फ़ंक्शन में केवल args वापस नहीं करना पड़ता है। आप "ackermann(args)" लौटा सकता है, जो एक लंबे समय ले सकता है, के रूप में ...

function WhatAmIDoing2(args...) 
    return function() 
     return ackermann(args) 
    end 
end 

लेकिन WhatAmIDoing2 तुरंत वापसी होगी क्योंकि एकरमैन फंक्शन का मूल्यांकन एक closure में निलंबित किया जाएगा। (हाँ, यहां तक ​​कि कॉल-बाय-वैल्यू भाषा में भी।)

+0

यह वही एक कॉल-दर-मूल्य भाषा (यह क्या है?) के बाद से कोई गणना देरी होगी में "toThunk" –

+0

की तरह कुछ यह वास्तव में एक thunk नहीं है, हो रहा है हो रहा है। –

-2

एक प्रतिनिधि?

असल में आप एक फ़ंक्शन लौट रहे हैं ?? या एक समारोह का उत्पादन?

समझते नहीं, खेद ...

+0

यह आपकी सामान्य सी # चीज नहीं है। कार्यात्मक प्रोग्रामिंग एक अलग दुनिया है जहां फ़ंक्शंस फ़ंक्शन –

+0

फ़्रेडरिक सही है, यह सामान्य सामान नहीं है, लेकिन मैं जो कुछ भी कर रहा हूं उस पर एक नाम रखने के लिए पर्याप्त नहीं जानता, हालांकि ऐसा करने के लिए एक उपयोगी चीज है –

+0

मुझे लगता है कि मैं जवाब देने से पहले टैग को पढ़ने के लिए सीखने शुरू करने की आवश्यकता ... नहीं पता था कि यह कार्यात्मक प्रोग्रामिंग से संबंधित था ... इसलिए मैं अपने भाषा ग्रहण किया। – Ironicnet

4

मैं कहूँगा कि XXXX रिटर्न एक्स, वाई और जेड के मूल्यों पर बाध्य अज्ञात समारोह के बंद

यह wikipedia लेख एक समारोह है कि एक तर्क के रूप में एक और समारोह लेता है या किसी अन्य समारोह एक higher-order function कहा जाता है देता है कार्यात्मक प्रोग्रामिंग में कुछ प्रकाश

2

Currying फ़ंक्शंस को एक फ़ंक्शन में बदलने के बारे में है, प्रत्येक केवल एक पैरामीटर लेता है और ऐसा कोई अन्य फ़ंक्शन लौटाता है। तो, इस उदाहरण का करी से कोई संबंध नहीं है।

पिकलिंग एक शब्द है जिसका उपयोग किसी प्रकार के क्रमबद्धरण को दर्शाने के लिए किया जाता है। शायद कई मानों से निर्मित ऑब्जेक्ट को संग्रहीत करने के लिए।

यदि आपके लिए दिलचस्प पहलू यह है कि लौटा हुआ कार्य XXXX फ़ंक्शन के तर्कों तक पहुंच सकता है, तो मैं Remo.D के साथ जाऊंगा।

1

के रूप में अन्य लोगों ने कहा, यह एक higher-order function है। आप अपने प्रश्न में "पैटर्न" है के रूप में, मुझे लगता है मैं जोड़ना होगा कि कार्यात्मक भाषाओं के इस सुविधा अक्सर उच्च क्रम कार्यों के बिना भाषाओं में strategy pattern का उपयोग कर मॉडलिंग की है सोचा। बहुत समान

1

कुछ Clojure में constantly कहा जाता है:

http://github.com/richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#L1096

केवल समारोह है कि constantly रिटर्न युक्तियों के स्वेच्छाचारी राशि लेता है, यह अधिक सामान्य (और लचीला) अपने पैटर्न से बना रही है।

(map (constantly 9) [1 2 3]) 
=> (9 9 9) 

बस सोच:

अगर इस पद्धति एक नाम है पता नहीं है, लेकिन ऐसे मामलों में जहां सामान्य रूप से काम करता है उम्मीद कर रहे हैं में इसका इस्तेमाल होता है, लेकिन मैं के लिए देखभाल सभी कि एक निश्चित मान दिया जाता है , आप इसका क्या उपयोग करते हैं?

+0

हाँ मुझे लगता है कि पैटर्न (माइक्रो-पैटर्न?) 'लगातार' इसका सही नाम है। मैं वास्तव में इसके लिए किसी भी उद्देश्य नहीं था, लेकिन जब मैं एक कार्यात्मक पुस्तकालय का निर्माण कर रहा है, एक सीखने के अनुभव के रूप में, मैं इस की संभावना का पता मेरे रास्ते अव्यवस्थित है और पाया है कि यह एक तरह की विशेष था और एक उचित नाम हो सकता है –

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