From 6e40672f10b1e145f9f9f1fecb758705c11d9129 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 27 Apr 2024 19:55:27 +0200 Subject: [PATCH] experiments with closure-based variables --- scratch.lisp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/scratch.lisp b/scratch.lisp index 4ec3ef6..6af74fe 100644 --- a/scratch.lisp +++ b/scratch.lisp @@ -18,3 +18,26 @@ (sort r #'(lambda (x y) (string<= (package-name (symbol-package x)) (package-name (symbol-package y))))))) + +(defun x-make-var (value) + #'(lambda (&optional (nv nil)) + (if (eq nv nil) + value + (setf value nv)))) + +(defun x-get-var (vf) + (funcall vf)) + +(defun x-put-var (vf value) + (funcall vf value)) + +(defun make-var (val) + (let ((var (list val))) + #'(lambda (fn) + (funcall fn var)))) + +(defun get-var (vf) + (funcall vf #'(lambda (x) (car x)))) + +(defun set-var (vf nv) + (funcall vf #'(lambda (x) (setf (car x) nv))))