У меня есть вопросы относительно F # на моно. Я занимаюсь этим курсом по функциональному программированию в своем университете. В курсе мы используем F #, и я использую Xamarin в качестве моего редактора.Проблемы оптимизации хвостовых опций F # на Mono
Дело в том, что у нас был урок по рекурсии хвоста, как инструмент для повышения эффективности. Но когда вы не можете написать хвост рекурсивной функции, нам пришлось использовать непрерывный, так что мы используем кучу, а не стек.
Это, похоже, не работает на mono 3.10.0 с F # 3.1, я получаю System.StackOverflowException. Это должно быть невозможно получить, поскольку непрерывный должен использовать кучу.
let rec fibC n c =
match n with
|0 -> c 0
|1 -> c 1
|n -> fibC (n-1) (fun v1 -> fibC (n-2) (fun v2 -> c(v1+v2)))
Существует некоторое указание на то, что Mono не поддерживает устранение вызова хвоста, см. [Здесь] (http://flyingfrogblog.blogspot.se/2009/01/mono-does-not-support-tail-calls.html) и [здесь] (http://stackoverflow.com/questions/9595585/what-is-the-current-state-of-tail-call-optimization-for-f-on-mono-2-11) – Christian
Я думаю вы имеете в виду «проблемы продолжения» на моно (в заголовке), но я не могу точно сказать, поэтому я не буду менять название. –
@OnorioCatenacci Я предполагаю, что это должно быть название что-то вроде «Проблемы оптимизации хвоста F # на Mono». Вышеприведенный код, как я понимаю, написал, чтобы использовать продолжение как средство для получения рекурсивного вызова в позиции хвоста и, таким образом, использовать TCO. – Christian