Myślę, że to błąd w formatting module, który dba o ładne drukowanie do F # Interactive.
Istnieje kilka nierekultywujących funkcji rekurencyjnych, które używają np. PrintLength
np. boundedUnfoldL
w tym line. Realizacja boundedUnfoldL
nie jest rzeczywiście ogon rekurencyjnej:
let boundedUnfoldL
(itemL : 'a -> layout)
(project : 'z -> ('a * 'z) option)
(stopShort : 'z -> bool)
(z : 'z)
maxLength =
let rec consume n z =
if stopShort z then [wordL "..."] else
match project z with
| None -> [] // exhaused input
| Some (x,z) -> if n<=0 then [wordL "..."] // hit print_length limit
else itemL x :: consume (n-1) z // cons recursive...
consume maxLength z
Nie wiem, dlaczego nie wysadzić na Mono. Byłoby zaskakujące, gdyby F # Interactive on Mono potrafił pomyślnie obsłużyć> 5000 znaków.
Możesz zgłosić to jako błąd do https://visualfsharp.codeplex.com/workitem/list/basic.
Wygląda na to, że F # Interactive skorzystałby z https://fslang.uservoice.com/forums/245727-f-language/suggestions/5663074-able-a-compiler-warning-when-a-recursive-algorit – Asik