我寫的follwing功能:我怎麼知道,如果一個功能是在F#尾遞歸
let str2lst str =
let rec f s acc =
match s with
| "" -> acc
| _ -> f (s.Substring 1) (s.[0]::acc)
f str []
我怎麼能知道F#編譯器把它變成一個循環?有沒有辦法找到沒有使用反射器(我沒有反射器的經驗,我不知道C#)?
編輯:另外,是否有可能編寫一個尾遞歸函數而不使用內部函數,或者是否需要循環駐留?
另外,F#std lib中是否有函數運行給定的函數多次,每次都將它的最後輸出作爲輸入?比方說,我有一個字符串,我想要在字符串上運行一個函數,然後再通過結果字符串運行它,等等......
另請參見http://stackoverflow.com/questions/5809683/is-my-rec-function-tail-recursive – Brian 2011-04-27 22:16:44