From 77df6486f9ed77e38a554cdaa6e28bea348f4788 Mon Sep 17 00:00:00 2001 From: Felix Perktold Date: Wed, 21 Jan 2026 17:12:58 +0100 Subject: add primitive lazy-eval (STILL BROKEN!) --- lisp_api.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lisp_api.h') diff --git a/lisp_api.h b/lisp_api.h index 77e8d93..90e05e1 100644 --- a/lisp_api.h +++ b/lisp_api.h @@ -18,7 +18,8 @@ typedef enum { VT_PAIR, VT_LAMBDA, VT_PROCEDURE, - VT_ERROR + VT_ERROR, + VT_THUNK } val_type; struct value { @@ -41,6 +42,11 @@ struct value { struct { value *(*fn) (env *, value *); } procedure; + struct { + value *expr; + value *cached; + env *env; + } thunk; } as; }; @@ -52,6 +58,8 @@ value *make_nil(); value *make_lambda(env *e, value *params, value *body); value *make_procedure(value *(*fn) (env *, value *)); value *make_error(const char *str); +value *make_thunk(env *e, value *expr); +value *force_thunk(value *v); value *cons(value *car, value *cdr); value *car(value *cons); value *cdr(value *cons); -- cgit v1.2.3