Стало интересно попробовать на вкус функциональную парадигму (в том виде, в котором она представлена в F#) и окунуться в мир декларативности, так сказать Вопрос такой: можно ли достигнуть "хвостатости" рекурсии в таком случае:
let rec gen n =
if n = 1 then ff 0
else func (gen (n-1))
Если да, то каким образом...
Сейчас fsc не делает из такой функции цикла...
То есть мне надо получить такую конструкцию вида:
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Mr.Cat, Вы писали:
MC>>Другой вариант — не конструировать континуацию целиком, а аккумулировать значение MC>>.
S>Так и происходит. gen' на каждой итерации возвращает int.
не int, конечно, а а', где
val func : a' -> a'
Здравствуйте, samius, Вы писали: MC>>Другой вариант — не конструировать континуацию целиком, а аккумулировать значение S>Так и происходит.
В исходном варианте от nikov? Либо я совершенно не втыкаю в ocaml, либо одно из двух. Мне показалось, что gen' аккумулирует в первом аргументе func^n и на последней итерации применяет ее к ff(0).
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, samius, Вы писали: MC>>>Другой вариант — не конструировать континуацию целиком, а аккумулировать значение S>>Так и происходит. MC>В исходном варианте от nikov? Либо я совершенно не втыкаю в ocaml, либо одно из двух. Мне показалось, что gen' аккумулирует в первом аргументе func^n и на последней итерации применяет ее к ff(0).
Здравствуйте, Пельмешко, Вы писали:
П>Я побаиваюсь его, если честно :) Синтаксис устрашающе выглядит...
А в нем ничего страшного нет. Спецификация у него (haskell report) вдвое меньше, чем у C#. Синтаксис, хоть и сжатый, но на мой взгляд очень понятный и удобный. Возможности к абстракции гораздо выше. В сети есть куча учебных материалов.