summaryrefslogtreecommitdiff
path: root/lisp.c
diff options
context:
space:
mode:
authorFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-22 17:04:55 +0100
committerFelix Perktold <Felix.Perktold@student.uibk.ac.at>2026-01-22 17:04:55 +0100
commit87cf4ea19323dcac36ba2be7cae2af4341a13344 (patch)
treeb3d25a859cc7a20ccea5a5a8eb43872bd96a5d39 /lisp.c
parenta31d9092201d6e9fefde7403b19ed93512aa6b47 (diff)
fix force_thunk, add tests sponsored by claude.ai
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: ");