summaryrefslogtreecommitdiff
path: root/src/zisp/lib/list.zig
blob: cd6b553236fd43e004cbd6d5209402bd11765c49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const value = @import("../value.zig");

const Value = value.Value;

pub fn reverse(list: Value) Value {
    return reverseWithTail(list, value.nil);
}

pub fn reverseWithTail(list: Value, tail: Value) Value {
    var head = list;
    var result = tail;
    while (!value.nil.eq(head)) {
        const p = value.pair.unpack(head);
        result = value.pair.cons(p[0], result);
        head = p[1];
    }
    return result;
}