From b7fb551ae61d26c30e6078f1f617862430141ce3 Mon Sep 17 00:00:00 2001 From: Taylan Kammer Date: Sat, 22 Feb 2025 18:01:33 +0100 Subject: update --- src/libzisp/lib/list.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/libzisp/lib/list.zig (limited to 'src/libzisp/lib') diff --git a/src/libzisp/lib/list.zig b/src/libzisp/lib/list.zig new file mode 100644 index 0000000..9d6a6bc --- /dev/null +++ b/src/libzisp/lib/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; +} -- cgit v1.2.3