Exception handling

This commit is contained in:
2026-09-03 09:34:54 -07:00
parent 07060a17fe
commit dc313fafa0
12 changed files with 209 additions and 96 deletions
+27 -1
View File
@@ -62,10 +62,36 @@ DEFUN(nreverse, "nreverse", (LispVal * list), "(list)", "") {
return rev;
}
DEFUN(last, "last", (LispVal * list), "(list)", "") {
if (NILP(list)) {
return Qnil;
}
CHECK_LISTP(list);
while (CONSP(XCDR(list))) {
list = XCDR(list);
}
return list;
}
DEFUN(listp, "listp", (LispVal * obj), "(obj)", "") {
return LISTP(obj) ? Qt : Qnil;
}
DEFUN(proper_list_p, "proper-list-p", (LispVal * obj), "(obj)", "") {
CHECK_LISTP(obj);
return (NILP(Fcircular_list_p(obj)) && NILP(XCDR(Flast(obj)))) ? Qt : Qnil;
}
DEFUN(circular_list_p, "circular-list-p", (LispVal * obj), "(obj)", "") {
CHECK_LISTP(obj);
return list_length(obj) == -1 ? Qt : Qnil;
}
DEFUN(dotted_list_p, "dotted-list-p", (LispVal * obj), "(obj)", "") {
CHECK_LISTP(obj);
return (NILP(Fcircular_list_p(obj)) && !NILP(XCDR(Flast(obj)))) ? Qt : Qnil;
}
DEFUN(list, "list", (LispVal * args), "(&rest args)", "") {
return args;
}
@@ -81,7 +107,7 @@ LispVal *nth(size_t n, LispVal *list) {
return Qnil;
}
DEFUN(nth, "list", (LispVal * n, LispVal *list), "(n list)", "") {
DEFUN(nth, "nth", (LispVal * n, LispVal *list), "(n list)", "") {
CHECK_TYPE(n, TYPE_FIXNUM);
return nth(XFIXNUM(n), list);
}