aboutsummaryrefslogtreecommitdiff
path: root/src/primitives.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/primitives.c')
-rw-r--r--src/primitives.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/primitives.c b/src/primitives.c
index 266a8b7..510ca1e 100644
--- a/src/primitives.c
+++ b/src/primitives.c
@@ -327,6 +327,30 @@ SExpRef primitive_quasi(Interp *interp, SExpRef args) {
return ret;
}
+SExpRef primitive_and(Interp *interp, SExpRef args) {
+ if (lisp_length(interp, args) < 1) return new_error(interp, "and: syntax error.\n");
+ SExpRef ret;
+ SExpRef i = args;
+ while (!NILP(i)) {
+ ret = EVAL(CAR(i));
+ if (!TRUEP(ret)) return ret;
+ i = CDR(i);
+ }
+ return ret;
+}
+
+SExpRef primitive_or(Interp *interp, SExpRef args) {
+ if (lisp_length(interp, args) < 1) return new_error(interp, "or: syntax error.\n");
+ SExpRef ret;
+ SExpRef i = args;
+ while (!NILP(i)) {
+ ret = EVAL(CAR(i));
+ if (TRUEP(ret)) return ret;
+ i = CDR(i);
+ }
+ return ret;
+}
+
// TODO:
// - defmacro
// - macroexpand-1