Praktikum 11

  1. Die Prozedur "akkumuliere-n" gleicht "akkumuliere", nur hat sie als drittes Argument einen Strom von Datenströmen, die alle die gleiche Anzahl von Elementen haben. Sie wendet die Akkumulationsprozedur zur Kombination aller ersten Elemente der Datenströme, aller zweiten Elemente der Datenströme usw. an, und liefert einen Datenstrom der Ergebnisse. Beispiel: Es sei s ein Datenstrom, der die vier Datenströme ((1 2 3) (4 5 6) (7 8 9) (10 11 12)) beinhaltet. Dann ist der Wert von (akkumuliere-n + 0 s) der Datenstrom (22 26 30).
    Ergänzen Sie die folgende Definition von "akkumuliere-n":
    
    (define (akkumuliere-n op anfangs-wert stroeme)
      (if (empty-stream? (head stroeme))
          the-empty-stream
          (cons-stream (akkumuliere op anfangs-wert <???>)
                       (akkumuliere-n op anfangs-wert <???>))))
    
  2. Was druckt der Interpretierer nach der Auswertung eines jeden der folgenden Audrücke aus? Wie würden diese Antworten lauten, wenn (delay <ausdruck>) als (lambda () <ausdruck>) implementiert würe (ohne die Optimierung mittels "memo-proc")?
    
    (define (zeige x)
      (print x)
      x)
    
    (define (n-tes-strom n s)
      (if (= n 0)
          (head s)
          (n-tes-strom (-1+ n) (tail s))))
    
    (define x (abb zeige (durchzaehlen-intervall 0 10)))
    
    (n-tes-strom 5 x)
    
    (n-tes-strom 7 x)
    
  3. Was berechnet die folgende Prozedur? Welche aufeinanderfolgenden Elemente werden von (expand 1 7 10) erzeugt, welche von (expand 3 8 10)?
    
    (define (expand z n radix)
      (cons-stream (quotient (* z radix) n)
                   (expand (remainder (* z radix) n) n radix)))