summaryrefslogtreecommitdiff
path: root/lisp.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisp.c')
-rw-r--r--lisp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lisp.c b/lisp.c
index 0f43f85..792fabe 100644
--- a/lisp.c
+++ b/lisp.c
@@ -95,7 +95,7 @@ value *force_thunk(value *v) {
}
value *evaled = eval(v->as.thunk.env, v->as.thunk.expr);
- force_thunk(evaled);
+ evaled = force_thunk(evaled);
v->as.thunk.cached = evaled;
return evaled;
}
@@ -292,7 +292,9 @@ value *eval_pair(env *e, value *v) {
if (head->type == VT_SYMBOL && !strcmp(head->as.sym, "define")) {
value *defargs = tail;
value *defname = car(defargs);
- value *defval = eval(e, car(cdr(defargs)));
+
+ //define does not bind to evaluated arguemnts but is lazy
+ value *defval = make_thunk(e, car(cdr(defargs)));
if (defname->type != VT_SYMBOL) {
printf("error, expected symbol, found: ");