Fix printing
This commit is contained in:
+35
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user