Ukážeme si volání s aktuálním pokračováním ja příkladu jednoduché rekurzivní funkce, faktoriálu. Faktoriál čísla n
pro n > 0
je definován vzorcem n * f(n-1)
.
def fact(n) if n == 0 1 else n * fact(n-1) end end
Výpočet můžeme zachytit v proceduře
proc {|res| n * res }
Jednou zachycený výpočet můžeme předat v kódu dál.
fact(n-1, proc {|res| done.call(n * res)})
def fact_cps(n, done) if n == 0 done.call(1) else fact_cps(n-1, proc {|res| done.call(res * n)}) end end
call_with_current_continuation { |current_continuation| puts "This will be printed" current_continuation.call puts "This will never get printed" }