Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

mutable-iteration.nct

use std/io
use std/vec.Vec

struct Counter {
    value: i32
}

blocking func main(): i32! {
    var counters = Vec [Counter { value: 1 }, Counter { value: 2 }, Counter { value: 3 }]
    var expected: i32 = 11
    for counter in &+counters {
        counter.value += 10
        if counter.value != expected {
            return 1
        }
        expected += 1
    }
    var readonly_total: i32 = 0
    for counter in &counters {
        readonly_total += counter.value
    }
    if readonly_total != 36 {
        return 1
    }
    var owned_total: i32 = 0
    for counter in move counters {
        owned_total += counter.value
    }
    if owned_total != 36 {
        return 1
    }
    io.print("mutable iteration updated every element\n")?
    return 0
}