एक बंद एक कोड सूचक और एक पर्यावरण सूचक शामिल है जो एक जोड़ी है। पर्यावरण सूचक में दिए गए फ़ंक्शन के सभी निःशुल्क चर शामिल होते हैं। उदाहरण के लिए: a
और b
:
fun f(a, b) =
let fun g(c, d) = a + b + c + d
in g end
val g = f(1, 2)
val result = g(3, 4) (*should be 10*)
समारोह g
दो मुक्त चर होते हैं। यदि आप मुक्त चर शब्द से परिचित नहीं हैं, तो यह एक चर है जिसे फ़ंक्शन के दायरे में परिभाषित नहीं किया गया है। इस संदर्भ में, पर से अधिक कुछ, किसी फ़ंक्शन से एक फ्री चर के किसी भी घटना को हटाने का मतलब है। उपरोक्त उदाहरण बंद करने के लिए अच्छी प्रेरणा प्रदान करता है। जब फ़ंक्शन f
रिटर्न होता है, तो हमें याद रखने में सक्षम होना चाहिए कि a
और b
के मान बाद में क्या हैं। जिस तरह से इस संकलित किया गया है, एक कोड सूचक है और इस तरह के रूप में सभी मुक्त चर, जिसमें एक रिकार्ड के रूप में समारोह g
के इलाज के लिए है:
fun g(c, d, env) = env.a + env.b + c + d
fun f(a, b, env) = (g, {a = a, b = b})
val (g, gEnv) = f(1, 2)
val result = g(3, 4, gEnv)
जब हम समारोह g
लागू होते हैं, हम पर्यावरण कि जब बुला वापस आ गया था की आपूर्ति फ़ंक्शन f
। ध्यान दें कि अब g
फ़ंक्शन एक चर के किसी भी घटना है जो इसके दायरे में परिभाषित नहीं है। हम आमतौर पर एक शब्द कहते हैं जिसमें बंद के रूप में कोई भी निःशुल्क चर नहीं है। आप अभी भी स्पष्ट नहीं कर रहे हैं, तो मैट शायद http://matt.might.net/articles/closure-conversion/
http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#History_and_etymology - आपको कुछ शुरू करने के लिए देता है। एक बंद "खुली बाइंडिंग" बंद हो जाता है। – Blorgbeard
एलओएल, "* एक बंद कुछ ऐसा है जो खुली बाइंडिंग पर बंद हो जाता है। *" क्या यह कोई कम वर्णनात्मक हो सकता है?! वास्तव में?!? ** वास्तव में?!? ** ** – smeeb
ठीक है आप एक बिंदु होगा अगर वह मैंने कहा या लिंक से सीधे उद्धरण था।यहां मैंने जो लिंक किया है: "एक लैम्ब्डा अभिव्यक्ति जिसका खुला बाइंडिंग (फ्री चर) को लेक्सिकल वातावरण (या बाध्य) में बंद कर दिया गया है, जिसके परिणामस्वरूप बंद अभिव्यक्ति या बंद हो गया है"। – Blorgbeard