2012-01-13 8 views
20

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

मैं "ईटा कमी" शब्द में आया था, जिसे f x = M x ==> M जैसे कुछ परिभाषित किया गया था यदि x "एम में मुक्त नहीं है"। मेरा मतलब है, मुझे लगता है कि मैं जो कहने की कोशिश कर रहा हूं उसके बारे में समझता हूं, ऐसा लगता है कि जब आप फ़ंक्शन को पॉइंट-फ्री शैली में परिवर्तित करते हैं तो आप ऐसा करते हैं, लेकिन मुझे नहीं पता कि एक्स के बारे में क्वालीफायर क्या मुफ्त साधन नहीं है।

उत्तर

27

यहाँ एक उदाहरण है:

\f -> f x 

इस लैम्ब्डा में, x एक नि: शुल्क चर रहा है। असल में एक फ्री वैरिएबल एक चरबी में प्रयोग किया जाता है जो लैम्ब्डा के तर्कों में से एक नहीं है (या let चर)। यह लैम्ब्डा के संदर्भ से बाहर आता है।

एटा कमी मतलब है कि हम बदल सकते हैं:

(\x -> g x) to (g) 

लेकिन तभी जब x मुक्त नहीं है (यानी यह नहीं किया जाता है या एक तर्क है) g में।

(\x -> (x+) x) to (x+) ??? 
+2

माइनर नाइटपिक: यदि यह बाध्य है, तो 'x' का उपयोग करने के लिए यह ठीक हो सकता है। ईटा-कम करने '(\ x -> (\ x -> x + x) x) 'से' (\ x -> x + x)' पूरी तरह से ठीक है, भले ही '(\ x -> x + x)' 'x' के दो उपयोग शामिल हैं। यह एक कोने का मामला है जो मानव लिखित कोड से निपटने में ज्यादा दिखाई नहीं देगा, लेकिन मुझे लगता है कि कंपाइलर्स इस बार अधिक बार दौड़ेंगे। – yatima2975

+0

मैंने वहां थोड़ा सा शब्द गड़बड़ कर दिया। "लेकिन केवल अगर 'x' का उपयोग नहीं किया जाता है (यानी मुक्त नहीं)" होना चाहिए "लेकिन केवल तभी जब' x' मुक्त नहीं है (यानी इसका उपयोग नहीं किया जाता है या तर्क है)"। मैंने मूल रूप से इसे इस तरह लिखा था लेकिन इसे आसान बनाने के लिए इसे दूसरी तरफ बदल दिया। दुर्भाग्य से उस अर्थ को बदल दिया :) – porges

9

खैर, here's the relevant Wikipedia article, कि क्या लायक है के लिए: अन्यथा हम एक अभिव्यक्ति है जो एक अज्ञात चर को संदर्भित करता है बनाने होगी।

लघु संस्करण यह है कि इस तरह की परिभाषाएं "एम" जैसे प्लेसहोल्डर का उपयोग करके लैम्ब्डा अभिव्यक्ति के शरीर को बढ़ाती हैं, और इसलिए अतिरिक्त रूप से निर्दिष्ट करना होगा कि उस लैम्ब्डा द्वारा बंधे जाने वाले चर का उपयोग प्लेसहोल्डर द्वारा प्रस्तुत किए जाने वाले किसी भी रूप में नहीं किया जाता है।

तो, एक "मुक्त चर" यहां लगभग एक चर कुछ अस्पष्ट या अज्ञात बाहरी दायरे में परिभाषित का मतलब है -। उदा, \y -> x + y की तरह एक अभिव्यक्ति में, x एक नि: शुल्क चर रहा है लेकिन y नहीं है।

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

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