diff options
| author | Felix Perktold <Felix.Perktold@student.uibk.ac.at> | 2026-01-22 17:04:55 +0100 |
|---|---|---|
| committer | Felix Perktold <Felix.Perktold@student.uibk.ac.at> | 2026-01-22 17:04:55 +0100 |
| commit | 87cf4ea19323dcac36ba2be7cae2af4341a13344 (patch) | |
| tree | b3d25a859cc7a20ccea5a5a8eb43872bd96a5d39 /lisp.c | |
| parent | a31d9092201d6e9fefde7403b19ed93512aa6b47 (diff) | |
fix force_thunk, add tests sponsored by claude.ai
Diffstat (limited to 'lisp.c')
| -rw-r--r-- | lisp.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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: "); |
