IL命令を見たいのです.tail
が、私が書いてきた末尾呼び出しを使用した単純な再帰関数は、明らかにループに最適化されています。Reflectorでループがどのように見えるか完全にはわからないので、私は実際にこれを推測しています。しかし、私は間違いなく.tail
オペコードを見ていません。プロジェクトのプロパティで[末尾呼び出しの生成]をオンにしました。また、Reflectorでデバッグビルドとリリースビルドの両方を試しました。
私が使用したコードは、ChrisSmithによるProgrammingF#、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
か?