Я исхожу из функционального программирования и думаю сначала о рекурсивных решениях проблем, а не о итеративных. Я начинаю работать с Rebol немного (в частности, R3) и написал решение к первоклассному ката с помощью хвостовой рекурсивной функции с аккумулятором. Но с любым достаточно большим входом я ударяю стек. У меня есть сценарий для Rebol2 под названием «tail-func.r», который реализует версию оптимизации хвостового вызова, которую AFAIK не портировал на R3. Я знаю, что Rebol 3 во многих случаях реализует вещи по-другому, чем R2, так есть ли способ получить TCO в Rebol 3 без какого-либо дополнительного кода? Если нет, есть ли более простой способ получить его, не перенося старый сценарий?Оптимизация звонков с помощью перебора
Отредактированный, чтобы добавить свой код:
primefactors: function [n m factors] [
either n > 1
[ either (modulo n m) == 0
[ primefactors (n/m) m (append factors m) ]
[ primefactors n (m + 1) factors ] ]
[ factors ]
]
primefactors 30 2 (copy []) => [2 3 5]
Можете ли вы предоставить простой фрагмент кода в качестве примера? – johnk
Несомненно, я добавил пример реализации префактора. – teyvk