4.18.1. Ukázka

4.18.1.1. Jednoduchý příklad

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"
}

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .