Мне бы хотелось увидеть инструкцию .tail
IL, но простые рекурсивные функции, использующие хвостовые вызовы, которые я писал, по-видимому, оптимизированы в циклы. Я на самом деле догадываюсь об этом, так как я не совсем уверен, как выглядит цикл в Reflector. Я точно не вижу никаких кодов .tail
. В свойствах моего проекта отмечен флажок «Генерировать хвостовые вызовы». Я также попробовал обе сборки Debug и Release в Reflector.
Код, который я использовал, взят из Программирование F # Крисом Смитом , стр. 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
?