Pergunta para iniciantes no Common Lisp:
Como fazer com que meu procedimento retorne objeto procedimental distinto com sua própria ligação local cada vez que for chamada? Atualmente, uso let para criar o estado local, mas duas chamadas de função estão compartilhando o mesmo estado local. Aqui está o 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
Devo fazê-lo de outra maneira? A minha maneira de escrever está errada? Alguém pode me ajudar a tirar essa dúvida? Desde já, obrigado.