Каков некоторый простой код F#, который генерирует .tail IL инструкция?

Я хотел бы видеть .tail Инструкция IL, но простые рекурсивные функции с помощью последних вызовов, которые я писал, по-видимому, оптимизирована в циклы. Я на самом деле предполагаю на этом, поскольку я не совсем уверен, на что цикл похож в Отражателе. Я определенно не вижу никого .tail коды операций все же. Я имею, "Генерируют последние вызовы", зарегистрировался в свойствах моего проекта. Я также попробовал и Отладку и Сборки конечных версий в Отражателе.

Код, который я использовал, от Программирования F# Chris Smith, страницей 190:

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

Может любой предлагать некоторый простой код F#, который действительно генерирует .tail?

7
задан Guy Coder 4 March 2016 в 15:58
поделиться

1 ответ

Взаимно рекурсивные функции должны:

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)

(не пробовал только что).

EDIT

См. также

Как узнать, является ли функция хвостовой рекурсивной в F#

6
ответ дан 7 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: