Bedingte Ausdrücke

Aus ProgrammingWiki
Archivierte Version vom 2010-10-11T08:24:35+00:00. Aktuelle Version

Inhaltsverzeichnis

Bedingte Ausdrücke in Scheme

Bedingte Ausdrücke sind Programmstrukturen, mit denen der Wert eines Ausdrucks von bestimmten Bedingungen abhängig gemacht werden kann.

Grundform Alternative Fallauswahl

<eval id="4c7ebb1941f9b">(gewichtspruefer 75)</eval>

<eval id="4c7ebb19420c5">(my-abs -3.45)</eval>

<eval id="4c9e20fdab08f">(vokal? #\o)</eval>

Beachte:

  • die angegebenen Bedingungen werden in der vorgegebenen Reihenfolge evaluiert,
  • sobald sich zum ersten Mal der Wahrheitswert #t ergibt, werden keine weiteren Bedingungen untersucht

    (selbst dann nicht, wenn ein fehlerhafter Ausdruck wie (/ 4 0) erscheint) – die Evaluation wird an dieser Stelle beendet,

  • else wird immer zu #t evaluiert, sodass bei seiner Evaluation immer der nachfolgende Ausdruck abgearbeitet wird.

Beachte:

  • der else–Teil kann grundsätzlich entfallen,
  • in beiden Teilen darf nur ein Ausdruck stehen, anderenfalls muss mit

    (begin <ausdruck> ... <ausdruck>)</ausdruck></ausdruck> ein zusammengesetzter Ausdruck gebildet werden,

  • unbestimmten Rückgabewerten, wie
    (define my-sqrt
      (lambda (x)
        (if (>= x 0) (sqrt x))))
    

    sollten vermieden werden.

Beachte:

  • zunächst wird der nach case folgende Ausdruck evaluiert,
  • in einer Suche von oben nach unten wird festgestellt, in welcher Auswahlmenge sein Wert vorkommt,
  • der zu dieser Menge gehörende Ausdruck wird evaluiert und als Wert des gesamten case–Ausdrucks zurückgegeben,
  • falls der Wert in keiner Menge enthalten ist, bildet der Wert nach else das Resultat.

Aufgaben

  1. Signumfunktion

    Schreiben Sie eine Prozedur für die einstellige Funktion signum, die als Funktionswerte -1, 1 oder 0 entsprechend des Vorzeichens der als Argument übergebenen Zahl zurückgibt.
    Beispiele:

    (signum -337.8436) --> -1
    (signum 0)         -->  0
    (signum 34/45)     -->  1
    

    <eval id="4c7ebb1942316"> (signum -337.8436) </eval>

  2. Klassenstärkenprüfer

    Lehrer und Schüler bewerten Klassenstärken etwa mit folgenden Einschätzungen:

    • 10 ... 15: geringe Klassenstärke,
    • 16 ... 20: ideale Klassenstärke,
    • 21 ... 25: normale Klassenstärke,
    • 26 ... 32: hohe Klassenstärke,

    Alle anderen Schülerzahlen sind unzulässig. Implementieren Sie einen "Klassenstärkenprüfer" als bedingten Ausdruck mit den Sprachelementen:

    • cond
    • if
    • case.

    <eval id="4c7ebb194248a"> (klassenstaerke1 12) </eval>

    <eval id="4c7ebb19425b3"> (klassenstaerke2 21) </eval>

    <eval id="4c7ebb19426de"> (klassenstaerke3 38) </eval>