Конечно. Продолжения могут сделать что угодно! Тем не менее, вы в конечном итоге заново изобрели одну из двух вещей: цикл или вызов функции. На моей машине, которая выполняет оптимизацию хвостового вызова по умолчанию, хвостовая рекурсия с вызовом / cc не оптимизируется. Программа быстро останавливается, поскольку каждый callcc
явно захватывает весь стек вызовов. Этот код не работает, вот цикл call / cc:
def fact( n )
(n, f, k) = callcc { |k| [ n, 1, k ] }
if ( n == 0 ) then return f
else k.call n-1, n*f, k
end
end
Примечание: ранее я забыл, что call / cc - это не просто инициализация цепочки прохождения продолжения, и запутался в необходимости рекурсии.