2010-06-05 10 views
7

मैं .tail आईएल निर्देश देखना चाहता हूं, लेकिन मैं लिखने वाले पूंछ कॉल का उपयोग करके सरल रिकर्सिव फ़ंक्शंस को स्पष्ट रूप से लूप में अनुकूलित किया गया है। मैं वास्तव में इस पर अनुमान लगा रहा हूं, क्योंकि मुझे पूरी तरह से यकीन नहीं है कि परावर्तक में एक लूप कैसा दिखता है। मुझे निश्चित रूप से कोई भी .tail ऑपकोड नहीं दिख रहा है। मेरे पास प्रोजेक्ट की प्रॉपर्टीज में "पूंछ कॉल जेनरेट करें" है। मैंने प्रतिबिंबक में डीबग और रिलीज बिल्ड दोनों की भी कोशिश की है।कुछ आसान एफ # कोड क्या है जो .टेल आईएल निर्देश उत्पन्न करता है?

कोड रहा करते थे, पेज 190 Programming F# by Chris Smith से है:

let factorial x = 
// Keep track of both x and an accumulator value (acc) 
let rec tailRecursiveFactorial x acc = 
    if x <= 1 then 
     acc 
    else 
     tailRecursiveFactorial (x - 1) (acc * x) 
tailRecursiveFactorial x 1 

किसी को कुछ सरल एफ # कोड है जो वास्तव में .tail उत्पन्न होगा सुझाव है कि कर सकते हैं?

उत्तर

6

पारस्परिक रूप से पुनरावर्ती कार्यों चाहिए:

let rec even n = 
    if n = 0 then 
     true 
    else 
     odd (n-1) 
and odd n = 
    if n = 1 then 
     true 
    else 
     even (n-1) 

(यह सिर्फ प्रयास नहीं किया है अब)।

संपादित

भी देखें

How do I know if a function is tail recursive in F#

+1

मैं बस अब देख लिया है। हाँ! यह उत्पन्न करता है। –

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