Praktikum 4

  1. Eine Strecke in der Ebene wird als Paar von Punkten dargestellt: ein Anfangspunkt und ein Endpunkt. Definieren Sie einen Konstruktor "konstr-strecke" und Selektoren "anfangs-punkt" und "end-punkt", die die Darstellung der Strecken mit Hilfe von Punkten definieren. Darüberhinaus kann ein Punkt als Paar von Zahlen dargestellt werden: die x-Koordinate und die y-Koordinate. Geben Sie entsprechend einen Konstruktor "konstr-punkt" und Selektoren "x-koord" und "y-koord" an, die diese Darstellung definieren. Schreiben Sie schließlich unter Verwendung dieser Selektoren und Konstruktoren eine Prozedur "mittel-punkt", die eine Strecke als Argument hat und deren Mittelpunkt als Ergebnis liefert.
  2. Gegeben sei die folgende prozedurale Darstellung:
    (define (cons x y) (lambda (m) (m x y)))
    (define (car z) (z (lambda (p q) p)))
    Wie lautet die entsprechende Definition für "cdr"? Beweisen Sie, daß
    (car (cons x y))
    für beliebige Objekte x und y als Ergebnis x liefert, indem Sie sorgfältig das Substitutionsmodell anwenden!
  3. Beispiel zur Programmiertechnik "cdring down & consing up": Gefragt ist eine Prozedur, die eine Liste von Zahlen akzeptiert und eine Liste mit den Quadraten der Zahlen liefert.
    ==> (define 1-bis-4 (list 1 2 3 4))
    1-bis-4
    
    ==> (quadrat-liste 1-bis-4)
    (1 4 9 16)
  4. Jetzt entwerfen wir eine Prozedur höherer Ordnung, die eine Prozedur auf jedes Element einer Liste anwendet und eine Liste der erhaltenen Ergebnisse abliefert. Diese Prozedur hat traditionell den Namen "mapcar" und wird wie folgt verwendet:
    ==> (mapcar quadrat 1-bis-4)
    (1 4 9 16)
    
    ==> (mapcar (lambda (x) (* x (- x 2))) 1-bis-4)
    (-1 0 3 8)
    Geben Sie eine geeignete Definition für "mapcar" an.