Me gustaría ver la instrucción .tail
IL, pero las funciones recursivas simples que utilizan llamadas de cola que he estado escribiendo aparentemente están optimizadas en bucles. De hecho, estoy adivinando esto, ya que no estoy muy seguro de cómo se ve un lazo en Reflector. Definitivamente no veo ningún código de operación .tail
. He marcado "Generate tail calls" en las propiedades de mi proyecto. También probé las compilaciones Debug and Release en Reflector.¿Qué es un simple código F # que genera la instrucción .tail IL?
El código que he utilizado es de Programming F# by Chris Smith, página 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
Puede alguien sugerir algunos simples # código F que de hecho va a generar .tail
?
he comprobado en este momento. ¡Sí! genera .tail. –