diff options
Diffstat (limited to 'src/primitives.c')
| -rw-r--r-- | src/primitives.c | 24 |
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 |
