diff options
Diffstat (limited to 'modules/std_lib.c')
| -rw-r--r-- | modules/std_lib.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/modules/std_lib.c b/modules/std_lib.c index a38c5ff..858d34c 100644 --- a/modules/std_lib.c +++ b/modules/std_lib.c @@ -5,15 +5,23 @@ value *procedure_cons(env *e, value *args) { value *v = eval(e, car(args)); - return cons(v, eval(e, car(cdr(args)))); + return cons(v, make_thunk(e, car(cdr(args)))); } value *procedure_car(env *e, value *args) { - return car(eval(e, car(args))); + value *v = eval(e, car(args)); + while (v->type == VT_THUNK) { + v = force_thunk(v); + } + return car(v); } value *procedure_cdr(env *e, value *args) { - return cdr(eval(e, car(args))); + value *v = eval(e, car(args)); + while (v->type == VT_THUNK) { + v = force_thunk(v); + } + return cdr(v); } value *procedure_reverse(env *e, value *args) { |
