Praktikum 7

  1. Ein Akkumulator ist eine Prozedur, die immer wieder mit einem einzigen numerischen Argument aufgerufen wird, und diese Argumente zu einer Summe aufaddiert. Bei jedem Aufruf liefert sie die aktuelle akkumulierte Summe. Schreiben Sie eine Prozedur konstr-akkumulator, die Akkumulatoren konstruiert. Der Eingabeparameter von konstr-akkumulator soll der Anfangswert der Summe sein, z. B.:
    ==> (define A (konstr-akkumulator 5))
    A
    ==> (A 10)
    15
    ==> (A 10)
    25
  2. Ändern Sie die Prozedur konstr-konto aus der Vorlesung derart, daß die erzeugten Konten mit einem Kennwort geschützt werden. Das heißt, konstr-konto sollte als zusätzliches Argument ein Symbol haben:
    (define kto (konstr-konto 100 'geheim))
    Das daraus resultierende Kontenobjekt soll eine Anforderung nur dann bearbeiten, wenn diese zusammen mit dem korrekten Kennwort eingegeben wird, andernfalls soll es eine Zurückweisung ausgeben:
    ==> ((kto 'geheim 'abheben) 40)
    60
    ==> ((kto 'falsch 'einzahlen) 50)
    falsches Kennwort
  3. Nun soll es möglich sein, gemeinsame Konten zu eröffnen. Definieren Sie eine Prozedur konstr-gemeinsam mit drei Argumenten: ein durch ein Kennwort geschütztes Konto, das Kennwort dieses Kontos (zum Schutz gegen unbefugtes Zugänglichmachen eines geschützten Kontos) und ein neues Kennwort. konstr-gemeinsam muß eine zusätzliche Zugriffsmöglichkeit auf das ursprüngliche Konto schaffen, wobei das neue Kennwort verwendet werden soll. Wenn z.B. peter-kto ein Konto mit dem Kennwort sesam-oeffne-dich ist, dann ermöglicht
    (define paul-kto (konstr-gemeinsam peter-kto 'sesam-oeffne-dich 'rose))
    Transaktionen auf peter-kto unter dem Namen paul-kto und dem Kennwort rose. Ändern Sie die Lösung von Aufgabe 2 entsprechend dieser neuen Eigenschaft.
  4. Mit der Einführung der Zuweisung kann die Reihenfolge, in der Argumente einer Prozedur ausgewertet werden, sich auf das Ergebnis auswirken. Definieren Sie eine einfache Prozedur f so, daß die Auswertung von (+ (f 0) (f 1)) als Ergebnis 0 liefert, wenn die Argumente von links nach rechts ausgewertet werden, und 1, wenn die Argumente von rechts nach links ausgewertet werden.