summaryrefslogblamecommitdiffstats
path: root/examples/21_spawn.rs
blob: 770bb2177bb4822784f444fbdf6e7fa2e7f16d1c (plain) (tree)























                                                                                
fn ack (m: uint, n: uint) -> uint {
    match (m, n) {
        (0, n) => n + 1,
        (m, 0) => ack(m - 1, 1),
        (m, n) => ack(m - 1, ack(m, n - 1)),
    }
}
fn main () {
    let (write, read) = channel();
    let (m, n) = (3, 10);

    spawn(proc () {
        write.send(ack(m, n));
    });

    let mut result = read.try_recv();
    while !result.is_ok() {
        println!(".");
        std::io::timer::sleep(100);
        result = read.try_recv();
    }
    println!("Ack({}, {}) = {}", m, n, result.unwrap_or_else(|e| { fail!(e) }));
}