Я хотел бы видеть .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
?
Взаимно рекурсивные функции должны:
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
См. также