Pregunta de novato en Common Lisp:
¿Cómo hacer que mi procedimiento devuelva un objeto procesal distinto con su propio enlace local cada vez que llame? Actualmente, uso let para crear el estado local, pero dos llamadas a funciones comparten el mismo estado local. Aquí está el código
(defun make-acc ()
(let ((balance 100))
(defun withdraw (amount)
(setf balance (- balance amount))
(print balance))
(defun deposit (amount)
(setf balance (+ balance amount))
(print balance))
(lambda (m)
(cond ((equal m 'withdraw)
(lambda (x) (withdraw x)))
((equal m 'deposit)
(lambda (x) (deposit x)))))))
;; test
(setf peter-acc (make-acc))
(setf paul-acc (make-acc))
(funcall (funcall peter-acc 'withdraw) 10)
;; Give 90
(funcall (funcall paul-acc 'withdraw) 10)
;; Expect 90 but give 80
¿Debería hacerlo de otra manera? ¿Está mal mi forma de escribir? ¿Alguien puede ayudarme a aclarar esta duda? Gracias por adelantado.