diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2025-02-20 18:25:25 +0100 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2025-02-20 18:25:25 +0100 |
| commit | 3b713ef3e872bda3da9e5a67a9bfd5c6701cb665 (patch) | |
| tree | 65c98d427b2616129e0338e0fe6d0c8fb709d029 /src/libzisp/list.zig | |
| parent | 4e88891235664917a2db44b84c0bbeeb13dd71ad (diff) | |
update
Diffstat (limited to 'src/libzisp/list.zig')
| -rw-r--r-- | src/libzisp/list.zig | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libzisp/list.zig b/src/libzisp/list.zig new file mode 100644 index 0000000..a4ce7a8 --- /dev/null +++ b/src/libzisp/list.zig @@ -0,0 +1,20 @@ +const value = @import("value.zig"); + +const Value = value.Value; + +pub fn reverse(list: Value) Value { + return reverseWithTail(list, value.nil.nil); +} + +pub fn reverseWithTail(list: Value, tail: Value) Value { + var head = list; + var result = tail; + while (!value.nil.check(head)) { + value.pair.assert(head); + const car = value.pair.car(head); + const cdr = value.pair.cdr(head); + result = value.pair.cons(car, result); + head = cdr; + } + return result; +} |
