LINUX.ORG.RU
> А, что он не умеет рекурсии превращать в циклы?

Замечательно умеет, попробуйте например

frac :: Int -> Integer
frac n = fracAcc n 1
      where fracAcc 0 v = v
            fracAcc n v = (fracAcc $! (n-1)) $! (n*v)

в сравнении с 

frac 0 = 1
frac n = n * frac (n-1)

Для больших n
fmj
()
Ответ на: комментарий от dilmah
ну это из категории:

-не подскажете ли, сколько времени?

-нет, не подскажу

:)

Pi ★★★★★
()
Ответ на: комментарий от fmj
Почему на коде типа

main = print(q(100000000000)) q(0) = 0 q(n) = n + q(n-1)

пишет, что не вмещается в 8Мб стека, для увеличения размера стека используйте параметр и т.д. ???

anonymous
()
Ответ на: комментарий от anonymous
костыль - это то как раз как ты считаешь: кладёшь н в стек, вызываешь ф-ию, кладёшь в стек (н-1), вызываешь функцию.
Pi ★★★★★
()
Ответ на: комментарий от Pi
> костыль - это то как раз как ты считаешь: кладёшь н в стек, вызываешь ф-ию, кладёшь в стек (н-1), вызываешь функцию.

Почему? Есть рекурсивное определение того что надо. В математике нет аккумуляторов!

anonymous
()
Ответ на: комментарий от anonymous
А вот так вот, блин. Дальше оптимизации хвостовой рекурсии ни одна реализация ни одного известного мне языка не продвинулась, ни один компилятор не может нормально свести нехвостовую рекурсию к хвостовой, даже в простейших случаях. Всё надо делать руками, в лучших традициях Си и машинных кодов, а потом ещё говорят о красоте и выразительности ФЯП.
anonymous
()
Ответ на: комментарий от anonymous
Ну так иначе пришлось бы отдельно описывать, какие случаи достаточно тривиальны, чтобы компилятор их понял, а какие нет — зачем?
Teak ★★★★★
()
Ответ на: комментарий от Teak
Не знаю, зачем, лол. Если человек способен понять, что случай тривиален, и что факториал и числа фибоначчи сводятся к простому циклу, то и умная машина вполне способна это сделать. Другое дело, что нормальных алгоритмов такой оптимизации до сих пор не существует, всё до сих пор на уровне пристального вглядывания, и это удручает.
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.