Neuling Frage in Common Lisp:
Wie kann ich meine Prozedur so gestalten, dass bei jedem Aufruf ein bestimmtes prozedurales Objekt mit einer eigenen lokalen Bindung zurückgegeben wird? Derzeit verwende ich let, um den lokalen Status zu erstellen, aber zwei Funktionsaufrufe verwenden denselben lokalen Status. Hier ist der Code,
(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
Soll ich es anders machen? Ist meine Schreibweise falsch? Kann mir bitte jemand helfen, diesen Zweifel auszuräumen? Danke im Voraus.