;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-assignments-reader.ss" "deinprogramm")((modname mutable-account) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) ; Ein veränderbares Bankkonto besteht aus ; - einem Kontostand (natural) (define-record-procedures-2 account make-account account? ((account-balance set-account-balance!))) (: make-account (natural -> account)) (: account? (any -> boolean)) (: account-balance (account -> natural)) (: set-account-balance! (account natural -> unspecific)) (define A1 (make-account 100)) (define A2 (make-account 100)) ; Geldbetrag von einem Konto abheben: (: account-withdraw! (account natural -> natural)) (define account-withdraw! (lambda (acct amount) (if (>= (account-balance acct) amount) (begin (set-account-balance! acct (- (account-balance acct) amount)) (account-balance acct)) (violation "No money!")))) ; Geldbetrag auf ein Konto einzahlen: (: account-deposit! (account natural -> natural)) (define account-deposit! (lambda (acct amount) (begin (set-account-balance! acct (+ (account-balance acct) amount)) (account-balance acct)))) ; Einen Geldbetrag von einem Konto auf ein anderes Konto transferieren: (: transfer-money! (account account natural -> unspecific)) (define transfer-money! (lambda (acct1 acct2 amount) (begin (account-withdraw! acct1 amount) (account-deposit! acct2 amount))))