OCaml
पूंछ की पुनरावृत्ति
खोज…
परिचय
OCaml जैसी कार्यात्मक भाषाएं पुनरावर्ती कार्यों पर बहुत अधिक निर्भर करती हैं। हालांकि, इस तरह के कार्यों में खपत से अधिक मेमोरी हो सकती है या, जब बड़े डेटासेट को संभालते हुए, ओवरफ्लो को ढेर करने के लिए।
ऐसे मामलों में पूंछ पुनरावृत्ति अनुकूलन का एक महत्वपूर्ण स्रोत है। यह एक प्रोग्राम को कॉलर संदर्भ को छोड़ने की अनुमति देता है जब पुनरावर्ती कॉल फ़ंक्शन का अंतिम होता है ।
सम कार्य
नीचे पूर्णांक सूची की राशि की गणना करने के लिए एक गैर-पूंछ-पुनरावर्ती कार्य है।
let rec sum = function
| [] -> 0
| h::t -> h + (sum t)
अंतिम ऑपरेशन जो फ़ंक्शन करता है वह अतिरिक्त है। इस प्रकार, कार्य पूंछ-पुनरावर्ती नहीं है।
नीचे उसी फ़ंक्शन का एक पूंछ-पुनरावर्ती संस्करण है।
let sum l =
let rec aux acc = function
| [] -> acc
| h::t -> aux (acc+h) t
in
aux 0 l
यहां, aux फ़ंक्शन पूंछ-पुनरावर्ती है: अंतिम ऑपरेशन जो वह करता है वह खुद कॉल कर रहा है। परिणामस्वरूप, sum के बाद वाले संस्करण का उपयोग किसी भी लंबाई की सूचियों के साथ किया जा सकता है।