@@ -498,6 +498,13 @@ static Obj *eval(void *root, Obj **env, Obj **obj) {
498498// Primitive functions and special forms
499499//======================================================================
500500
501+ // (list expr ...)
502+ static Obj * prim_list (void * root , Obj * * env , Obj * * list ) {
503+ DEFINE1 (root , values );
504+ * values = eval_list (root , env , list ); // Evaluate all arguments
505+ return * values ; // Return them as a list
506+ }
507+
501508// 'expr
502509static Obj * prim_quote (void * root , Obj * * env , Obj * * list ) {
503510 if (length (* list ) != 1 )
@@ -694,26 +701,6 @@ static Obj *prim_not(void *root, Obj **env, Obj **list) {
694701 return values -> car == Nil ? True : Nil ;
695702}
696703
697- // (and ...)
698- static Obj * prim_and (void * root , Obj * * env , Obj * * list ) {
699- Obj * car = True ; // by default, return True if no args
700- for (Obj * args = eval_list (root , env , list ); args != Nil ; args = args -> cdr ) {
701- car = eval (root , env , & args -> car );
702- if (car == Nil ) break ;
703- }
704- return car ;
705- }
706-
707- // (or ...)
708- static Obj * prim_or (void * root , Obj * * env , Obj * * list ) {
709- Obj * car = Nil ;
710- for (Obj * args = eval_list (root , env , list ); args != Nil ; args = args -> cdr ) {
711- car = eval (root , env , & args -> car );
712- if (car != Nil ) break ;
713- }
714- return car ;
715- }
716-
717704extern void process_file (char * fname , Obj * * env , Obj * * expr );
718705
719706static Obj * prim_load (void * root , Obj * * env , Obj * * list ) {
@@ -1010,6 +997,7 @@ void process_file(char *fname, Obj **env, Obj **expr) {
1010997}
1011998
1012999static void define_primitives (void * root , Obj * * env ) {
1000+ add_primitive (root , env , "list" , prim_list );
10131001 add_primitive (root , env , "quote" , prim_quote );
10141002 add_primitive (root , env , "cons" , prim_cons );
10151003 add_primitive (root , env , "car" , prim_car );
@@ -1019,8 +1007,6 @@ static void define_primitives(void *root, Obj **env) {
10191007 add_primitive (root , env , "while" , prim_while );
10201008 add_primitive (root , env , "gensym" , prim_gensym );
10211009 add_primitive (root , env , "not" , prim_not );
1022- add_primitive (root , env , "and" , prim_and );
1023- add_primitive (root , env , "or" , prim_or );
10241010 add_primitive (root , env , "+" , prim_plus );
10251011 add_primitive (root , env , "-" , prim_minus );
10261012 add_primitive (root , env , "*" , prim_mult );
0 commit comments