Fix printing

This commit is contained in:
2026-09-08 09:45:19 -07:00
parent e197e4b1dc
commit 04e1ca339b
6 changed files with 99 additions and 6 deletions
+35 -1
View File
@@ -1,7 +1,6 @@
#include "list.h"
#include "function.h"
#include "stack.h"
DEFINE_SYMBOL(circular_list_error, "circular-list-error");
DEFINE_CONDITION_CLASS(circular_list_error, error);
@@ -85,6 +84,41 @@ DEFUN(nreverse, "nreverse", (LispVal * list), "(list)", "") {
return rev;
}
DEFUN(reverse, "reverse", (LispVal * list), "(list)", "") {
LispVal *out = Qnil;
DOLIST_SAFE(cur, list) {
out = CONS(cur, out);
}
return out;
}
DEFUN(append, "append", (LispVal * lists), "(&rest lists)", "") {
return Qnil;
}
DEFUN(nconc, "nconc", (LispVal * lists), "(&rest lists)", "") {
LispVal *out = Qnil;
LispVal *end = Qnil;
DOTAILS(rest, lists) {
LispVal *cur = XCAR(rest);
CHECK_LISTP(cur);
if (NILP(cur)) {
continue;
}
if (NILP(out)) {
out = cur;
end = Flast(cur);
} else {
RPLACD(end, cur);
end = Flast(cur);
}
if (!NILP(XCDR(end)) && !NILP(XCDR(rest))) {
signal_type_error(cur, Qlist);
}
}
return out;
}
DEFUN(last, "last", (LispVal * list), "(list)", "") {
if (NILP(list)) {
return Qnil;