6

मैं सिर्फ निम्नलिखित लैम्ब्डा पथरी अभिव्यक्ति पाया:लैम्ब्डा पथरी अभिव्यक्ति को लागू समारोह आवेदन

(((λ f . (λ x . (f x))) (λ a . a)) (λ b . b)) 

तो है कि एक समारोह है कि एक तर्क च लेता है और एक अन्य समारोह है कि एक तर्क एक्स लेता है और एक्स के परिणाम पैदावार देता है एफ पर लागू उपर्युक्त अभिव्यक्ति का परिणाम होगा (λ बी। बी)।

यह मुझे आंशिक अनुप्रयोग और करीकरण की याद दिलाता है, हालांकि "अंदरूनी" फ़ंक्शन एप्लिकेशन (एफ एक्स) मेरी रुचि को पिक्चर करता है।

क्या उस अभिव्यक्ति के लिए गहरा सैद्धांतिक अर्थ है?

उत्तर

8

यह अभिव्यक्ति वास्तव में बहुत अच्छी है, भले ही यह एक बहुत ही सरल ऑपरेशन है। आखिरकार, फ़ंक्शन सिर्फ फ़ंक्शन एप्लिकेशन है, है ना?

यही वह जगह है जहां चीजें दिलचस्प होती हैं। लैम्ब्डा कैलकुस में, एप्लिकेशन एक वाक्य रचनात्मक नियम है, जो बस कहता है "अगर f एक अभिव्यक्ति है और x एक अभिव्यक्ति है, तो f x एक अभिव्यक्ति है"। आवेदन किसी भी प्रकार का कार्य नहीं है। यह दुर्भाग्यपूर्ण है: चूंकि लैम्ब्डा कैलकुलेशन सभी कार्यों के बारे में है, इसलिए यह किसी ऐसे काम पर भारी निर्भर होना पड़ेगा जो एक समारोह नहीं है!

आपका उदाहरण इस प्रकार का एक उपाय है। हालांकि हम आवेदन से छुटकारा नहीं पा सकते हैं, हम कम से कम एक समकक्ष को आवेदन के लिए परिभाषित कर सकते हैं। वह समकक्ष लैम्ब्डा फ़ंक्शन (λ f . (λ x . (f x))) (या अधिक idiomatically, λfx.f x) है। यह एक फ़ंक्शन है, इसलिए हम इसके बारे में तर्क कर सकते हैं और किसी अन्य फ़ंक्शन की तरह इसका उपयोग कर सकते हैं। हम इसे अन्य कार्यों के लिए तर्क के रूप में पास कर सकते हैं, या इसे किसी फ़ंक्शन के परिणामस्वरूप उपयोग किया जा सकता है। अचानक, फ़ंक्शन एप्लिकेशन कहीं अधिक उपयोगी हो गया है।

यह सब मुझे मिल गया है जहां तक ​​लैम्ब्डा कैलकुस जाता है, लेकिन यह फ़ंक्शन, और अन्य इस तरह के वास्तविक जीवन में भी काफी उपयोगी हैं। कार्यात्मक प्रोग्रामिंग भाषा एफ # में, इस फ़ंक्शन का नाम "पाइप-पिछड़ा ऑपरेटर" भी है, और हम लिखते हैं कि इसमें इन्फिक्स ऑपरेटर <| है। तो f (x) लिखने के विकल्प के रूप में जहां x कुछ अभिव्यक्ति है, हम f <| x लिख सकते हैं। यह अच्छा है क्योंकि यह अक्सर हमें बहुत परेशान करने वाले कोष्ठक लिखने से मुक्त कर सकता है। मुख्य बिंदु जो मैं यहां बनाने की कोशिश कर रहा हूं वह यह है कि, हालांकि, एक नज़र में आपका उदाहरण अकादमिक लगता है, या शायद बहुत उपयोगी नहीं है, यह वास्तव में कई मुख्यधारा प्रोग्रामिंग भाषाओं में अपना रास्ता पाया है।

+0

बहुत बहुत धन्यवाद, यह चीजों को साफ़ करता है, हालांकि मुझे इसे बार-बार दो बार जाना होगा :) चूंकि आपने <| एफ # में ऑपरेटर, यह हास्केल में $ ऑपरेटर के समान लगता है - क्या यह है? हालांकि मुझे लगता है कि हास्केल का $ सिर्फ इस विशेष नियम के बजाय ऑपरेटर प्राथमिकता पर आधारित है, लेकिन मैं निश्चित रूप से बहुत गलत हो सकता हूं (और शायद मैं हूं)। –

+0

@ फिलिपके: हाँ, मुझे विश्वास है कि '$' और '<| 'वही काम करते हैं, और मुझे पूरा यकीन है कि वे बिल्कुल वैसे ही परिभाषित हैं (हालांकि 100% निश्चित नहीं है)। मुझे याद है कि '$' और '<|' के पास एक अलग ऑपरेटर प्राथमिकता है, लेकिन मैं निश्चित रूप से कहने के लिए हास्केल के साथ पर्याप्त परिचित नहीं हूं। –