Mi piacerebbe vedere l'istruzione IL .tail
, ma le semplici funzioni ricorsive che utilizzano le chiamate tail che ho scritto sono apparentemente ottimizzate nei loop. In realtà sto indovinando su questo, perché non sono del tutto sicuro di come si presenta un loop in Reflector. Sicuramente non vedo nessun opcode .tail
. Ho "Genera chiamate di coda" selezionate nelle proprietà del mio progetto. Ho anche provato le versioni di debug e release in Reflector.Cos'è un semplice codice F # che genera l'istruzione .tail IL?
Il codice che ho usato da Programming F# by Chris Smith, pagina 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
Qualcuno può suggerire qualche semplice codice F #, che sarà davvero generare .tail
?
Ho controllato solo ora. Sì! genera. coda. –