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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.