From 87cf4ea19323dcac36ba2be7cae2af4341a13344 Mon Sep 17 00:00:00 2001 From: Felix Perktold Date: Thu, 22 Jan 2026 17:04:55 +0100 Subject: fix force_thunk, add tests sponsored by claude.ai --- lisp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lisp.c') 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: "); -- cgit v1.2.3