है कि बंद ट्रैम्पोलाइनिंग, जो यात्रा में रिफैक्टरिंग प्रत्यावर्तन के लिए एक तकनीक है के लिए उन्हें इस्तेमाल कर सकते हैं कोई भी भाषा हो सकते हैं। यह आपको "स्टैक ओवरफ्लो" समस्याओं से बाहर निकाल सकता है जो कई एल्गोरिदम में चलने वाले कार्यान्वयन को निष्क्रिय करते हैं।
एक ट्रैम्पोलिन एक ऐसा फ़ंक्शन है जो अपने कॉलर को वापस बंद करने के लिए "बाउंस" करता है। बंद "बाकी काम" को पकड़ता है।
उदाहरण के लिए, पायथन में आप एक पुनरावर्ती संचायक एक सरणी में मानों का योग करने को परिभाषित कर सकते हैं:
testdata = range(0, 1000)
def accum(items):
if len(items) == 0:
return 0
elif len(items) == 1:
return items[0]
else:
return items[0] + accum(items[1:])
print "will blow up:", accum(testdata)
मेरी मशीन पर, यह जब आइटम की लंबाई 998
से अधिक एक ढेर अतिप्रवाह के साथ बाहर क्रेप्स
वही कार्य बंद का उपयोग कर एक ट्रैम्पोलिन शैली में किया जा सकता है:
def accum2(items):
bounced = trampoline(items, 0)
while (callable(bounced)):
bounced = bounced()
return bounced
def trampoline(items, initval):
if len(items) == 0:
return initval
else:
return lambda: trampoline(items[1:], initval+items[0])
प्रत्यावर्तन परिवर्तित यात्रा करने के लिए, आप ढेर बुझाना नहीं है के द्वारा। जब आप रिकर्सन के साथ करते हैं तो क्लोज़ की बजाय खुद को गणना की स्थिति को कैप्चर करने की संपत्ति होती है।
स्रोत
2010-09-30 18:34:39
यह शायद समुदाय विकी होना चाहिए। – notJim
मैंने वही बात सोच ली है। यह पृष्ठ: http://php.net/manual/en/functions.anonymous.php का एक उदाहरण है, लेकिन इसे आसानी से बंद किए बिना पुनः लिखा जा सकता है। – Galen