लैम्ब्डा कैलकुलस में λx.λf.fx (जैसे रिवर्स अप्लाई) का नाम क्या है? क्या संबंधित फ़ंक्शन का प्रोग्रामिंग में एक मानक नाम है?


15

लैम्ब्डा कैलकुलस में λx.λf.fx का नाम क्या है?

क्या संबंधित फ़ंक्शन का कार्यात्मक प्रोग्रामिंग भाषाओं में एक मानक नाम है, जैसे हास्केल?

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, एक विधि के लिए एक सामान्य नाम है fooजो एक फ़ंक्शन को एक तर्क के रूप में लेता है, जैसे कि x.foo(f)रिटर्न f(x)?


3
आपको एक शब्दकोश खरीदने की आवश्यकता है।
रॉबर्ट हार्वे

13
कौनसा? कहाँ पे? कितना?
एलेक्सी

4
मुझे समझ में नहीं आ रहा है। यह मेरे लिए बिलकुल वाजिब सवाल लगता है।
जियोर्जियो

मैंने नीचे एक उत्तर पोस्ट किया है, लेकिन मुझे एहसास हुआ कि ओपी पूछ रहा था कि इस मेमने की अभिव्यक्ति का नाम क्या है इसलिए मैंने = डी
जेसन

आपके द्वारा संदर्भित अवधारणा को एक कॉम्बिनेटर के रूप में जाना जाता है, यहाँ एक पढ़ा है, यदि आप परिचित नहीं हैं। तो आप en.wikipedia.org/wiki/SKI_combinator_calculus हैं, हालांकि मैं आपके द्वारा संदर्भित प्रकृति के ज्ञात कॉम्बीनेटर से परिचित नहीं हूँ, हालाँकि, C से BCKW करीब है (यह फ्लिप है) लेकिन समान नहीं en.wikipedia.org/wiki/B,C,K,W_system क्यों कुछ मज़ा नहीं है और उन कॉम्बिनेटरों के संयोजन के साथ आते हैं जो आपके फ़ंक्शन के परिणामस्वरूप होते हैं :)
जिमी हॉफ

जवाबों:


9

हास्केल में, \x.\f.f xजैसा कि लागू केflip ($) रूप $में पढ़ा जाता है , मैं रिवर्स आवेदन के रूप में पढ़ूंगा

मोटे तौर पर /programming/4090168/is-there-an-inverse-of-the-haskell-operator पर आधारित


यह गलत है ... फ्लिप \f.\x.\y.f y xफ्लिप है C C यहाँ en.wikipedia.org/wiki/B,C,K,W_system
जिमी होफा

$इस तरह फ्लिप करने के लिए जोड़ने से भी आंशिक रूप से लागू होने वाले फ़ंक्शन की उम्मीद है जो 2 से अधिक तर्क लेता है जहां आप केवल अंतिम 2 को फ्लिप करने जा रहे हैं ताकि आप आंशिक रूप से सभी को लागू कर सकें लेकिन उन 2
जिमी हॉफ

6
तो आपको संदेह है कि नाम बदलने के (\f.\x.\y.f y x) (\f.\x.f x)लिए कम कर देता है (\x.\f.f x)? जो यह करता है।
डैन डी।

5

मानक कॉम्बिनेटर का उपयोग करके आप इस फ़ंक्शन को इस रूप में व्यक्त कर सकते हैं

C I

कहाँ पे

C f x y = (f y) x

हास्केल में यह होगा

flip id

यहाँ पर idटाइप (a -> b) -> a -> bऔर flipस्वैप के लिए विशेष है a -> bऔर a

आप इसे SKI पथरी में भी व्यक्त कर सकते हैं :

S (K (S I)) K

इसके लिए कॉम्बीनेटर को समर्पित करने के लिए +1। मुझे वास्तव में संदेह नहीं है कि यह एक बहुचर्चित बात है, हालांकि अगर उसने पहचान लिया कि यह चर्च के अंकों से संबंधित कुछ है, तो मुझे आश्चर्य है कि अगर सीआई कहीं भी किसी भी व्यक्ति के रूप में चर्च के अंकों के अध्ययन में प्रासंगिक है
जिमी हॉफ

5

मूल अलोंजो चर्च के "लैम्ब्डा-रूपांतरण की गणना" में, वह टी द्वारा इस कॉम्बिनेटर को दर्शाता है ।

चर्च अंकों के संदर्भ में, इसे एक्सप कहा जाता है । यह मेल खाता है एक शब्द की "आवेदन" के लिए चर्च द्वारा इस्तेमाल किया "आशुलिपि" अंकन एन एक पद के लिए एम : "[ एम एन ]" "(के लिए खड़ा है समुद्री मील दूर )"।

मैंने अभी तक प्रोग्रामिंग में एक अनुरूप कार्य के लिए एक मानक नाम नहीं सुना है।


3

इसे कभी-कभी थ्रश कॉम्बिनेटर के रूप में संदर्भित किया जाता है , और क्लॉजुरे में इसे थ्रेड-प्रथम मैक्रो कहा जाता है । प्राथमिक उपयोग यह है कि आप जिस क्रम में वे निष्पादित करते हैं x, उसमें जंजीर संगणना की एक श्रृंखला के रूप में एक संगणना व्यक्त करने की अनुमति देता है। उदाहरण के लिए, मान लेना , इसे किसी फ़ंक्शन में पास करना f, फिर किसी फ़ंक्शन के परिणामों को f(x)पास gकरना, जैसा लिखा जाएगा। g(f(x))मानक फ़ंक्शन संरचना का उपयोग करना (या g (f x)यदि आप निहित कोष्ठक के साथ काम कर रहे हैं।) यह अजीब हो सकता है जब बड़ी संख्या में जंजीर कार्य होते हैं क्योंकि आपको उन्हें कैसे निष्पादित करना है के रिवर्स ऑर्डर में पढ़ना होगा। थ्रश कॉम्बिनेटर आपको इसे अलग तरह से व्यक्त करने देता है, अगर हम थ्रश कॉम्बिनेटर को इस प्रकार परिभाषित करते हैं:

T x f = f x
T x f g ... = T (T x f) g ...

तब अभिव्यक्ति T x f g hबन जाती है h (g (f x))

(अधिक जानकारी के लिए और साथ ही भाषा रैकेट में एक ठोस कार्यान्वयन की तलाश करने वालों के लिए, मेरे पास इस विषय पर एक ब्लॉग पोस्ट है: रैकेट में थ्रश कॉम्बिनेटर )


2

मुझे आशा है कि मैं आपके प्रश्न को सही ढंग से समझूंगा, लेकिन मेरा मानना ​​है कि इसे एमएल भाषाओं में (रिवर्स) पाइप ऑपरेटर के रूप में जाना जाता है।

[1; 2; 3] |> List.map sq // let it = [1; 4; 9]

रिवर्स पाइप ऑपरेटर भी है जो संचालन के क्रम में मदद करता है।

printf "The value is.." <| 2 + 3 // let it = "The value is..5"

यह उपयोगी है क्योंकि अप्रकाशित रूप

printf "The value is.." 2 + 3 ;; error

कोई त्रुटि नहीं होगी क्योंकि प्रिंटफ़ मूल्यांकन "The value is.." 2और त्रुटि का प्रयास करेगा क्योंकि कोई परिभाषित +ऑपरेटर नहीं है । उस काम को करने के लिए, कोष्ठक का उपयोग करें:

printf "The value is.." (2 + 3) // let it = "The value is..5"

व्यावहारिक उपयोग के लिए, |>ऑपरेटर अविश्वसनीय रूप से उपयोगी है और एफ #, लाइवस्क्रिप्ट और एलिक्सिर जैसी कई एमएल और एमएल-प्रेरित भाषाओं की ब्रेड-एंड-बटर। <|कम सामान्य है और आमतौर पर इसका उपयोग केवल तभी किया जाता है जब यह पठनीयता बढ़ाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.