Skip to content

Commit 00d1bdf

Browse files
committed
Reintroduce atom and progn
1 parent 3225bb5 commit 00d1bdf

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

src/minilisp.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,12 @@ static Obj *prim_quote(void *root, Obj **env, Obj **list) {
476476
return (*list)->car;
477477
}
478478

479+
static Obj *prim_atom(void *root, Obj **env, Obj **list) {
480+
if (length(*list) != 1)
481+
error("atom takes ontly 1 argument", (*list)->line_num);
482+
return ((*list)->car->type != TCELL) ? True : Nil;
483+
}
484+
479485
// (cons expr expr)
480486
static Obj *prim_cons(void *root, Obj **env, Obj **list) {
481487
if (length(*list) != 2)
@@ -681,6 +687,10 @@ static Obj *prim_println(void *root, Obj **env, Obj **list) {
681687
return Nil;
682688
}
683689

690+
static Obj *prim_progn(void *root, Obj **env, Obj **list) {
691+
return progn(root, env, list);
692+
}
693+
684694
// (if expr expr expr ...)
685695
static Obj *prim_if(void *root, Obj **env, Obj **list) {
686696
if (length(*list) < 2)
@@ -965,7 +975,9 @@ static void define_primitives(void *root, Obj **env) {
965975
add_primitive(root, env, "defmacro", prim_defmacro);
966976
add_primitive(root, env, "macroexpand", prim_macroexpand);
967977
add_primitive(root, env, "lambda", prim_lambda);
978+
add_primitive(root, env, "atom", prim_atom);
968979
add_primitive(root, env, "if", prim_if);
980+
add_primitive(root, env, "progn", prim_progn);
969981
add_primitive(root, env, "=", prim_num_eq);
970982
add_primitive(root, env, "eq", prim_eq);
971983
add_primitive(root, env, "print", prim_print);

0 commit comments

Comments
 (0)