next up previous
Next: Über dieses Dokument

M. Sperber Sommersemester 1999


Programmieren für Geisteswissenschaftler


Blatt 8 (Bonus-Runde)

  1. Repräsentiere Paare mit Hilfe von Prozeduren wie schon in der Vorlesung vorgeführt, aber unterstütze auch Operationen my-set-car! und my-set-cdr! analog zu set-car! und set-cdr!
  2. Mit Seiteneffekten läßt sich herausbekommen, in welcher Reihenfolge der Operator und die Operanden eines Prozeduraufrufs ausgewertet werden. Gib an, wie, und bekomme es für Scheme 48 heraus!
  3. Benutze Vektoren, um das Sieb des Eratosthenes tatsächlich so zu programmieren, wie in der Schule gelernt.
  4. Auf der Insel San Kenbarbie gilt:
    1. Der Barbier rasiert alle Männer, die sich nicht selbst rasieren.
    2. Der Barbier rasiert niemanden, der sich selbst rasiert.
    Wer rasiert den Barbier?
  5. Johnnie Cochran und Franz Beckenbauer machen einen Vertrag:

    Johnnie gibt Franz Unterricht in Rechtskunde, Beckenbauer bezahlt Cochran nachdem er seinen ersten Prozess gewinnt.

    Beckenbauer führt nun aber keinen Prozess!

    Wie kommt Johnnie jetzt an sein Geld?

  6. Stelle Dir eine geheime Geschäftsbeziehung mit einem unbekannten Partner vor, mit dem Du jede Nacht ein Geschäft führst. Das Geschäft ist der Austausch zweier Gegenstände (sagen wir, einen Koffer voll Luft gegen ein Tutti-Frutti-Eis), die Ihr zunächst an geheimen (aber getrennten) Orten gleichzeitig hinterlegt, und dann jeweils am anderen Ort abholt. Jeder hat bei dem Geschäft die Wahl, tatsächlich den Gegenstand zu hinterlegen oder zu versuchen, den anderen hereinzulegen, indem er keinen Gegenstand hinterlegt.

    Je nach Ausgang des Geschäfts bekommt ein Geschäftspartner zwei Punkte, wenn er den anderen erfolgreich hereingelegt hat, also selbst nichts hinterlegt hat, aber der andere schon; einen Punkt, wenn beide etwas hinterlegt haben; keinen Punkt, wenn er vom anderen hereingelegt wurde.

    Das Spiel ist für die Fortsetzung über viele Runden ausgelegt. Schreibe ein Programm, daß das Spiel über eine angebbare Anzahl von Runden mit zwei beliebigen Partnern spielt und dabei den Punkestand unterhält. Entwickle verschiedene Strategien, und beobachte sie sowohl in einzelnen Spielrunden als auch im Zusammenhang mit wechselnden Partnern.

  7. Schreibe ein Programm, das Tic-Tac-Toe spielen kann, am besten mit auswechselbarer Strategie für den Computer-Spieler. Schreibe eine Strategie, die nie verliert.

  8. Schreibe ein Programm zum Tiere-Raten. Es sollte einen Dialog wie den folgenden führen:
    Denke Dir ein Tier aus.
    Handelt es sich um einen Fisch? (ja/nein)
    nein
    Säugetier vielleicht? (ja/nein)
    ja
    Ist es ein Landsäuger? (ja/nein)
    nein
    Walfisch? (ja/nein)
    nein
    Ich gebe auf.  Wie heißt das Tier?
    Delphin
    Was für eine Ja/Nein-Frage könnte "Delphin" von "Walfisch" unterscheiden?
    Gibt es ein solches Tier mit dem Namen "Flipper"?
    Was wäre die richtige Antwort für "Delphin"?
    ja
    Denke Dir ein Tier aus.
    Handelt es sich um einen Fisch? (ja/nein)
    nein
    Säugetier vielleicht? (ja/nein)
    ja
    Ist es eine Landsäuger? (ja/nein)
    nein
    Gibt es ein solches Tier mit dem Namen "Flipper"?
    ja
    Delphin?
    ja
    Freude schöner Götterfunken!
    ...
    
    Zum Einlesen der Frage kannst Du die Prozedur read-line benutzen, die eine Zeile einliest und als Zeichenkette zurückgibt.
    (define read-line
      (lambda ()
        (read-line-help '())))
    
    (define read-line-help
      (lambda (reverse-chars)
        (let ((next (read-char)))
          (if (or (eof-object? next)
                  (char=? #\newline next))
              (list->string (reverse reverse-chars))
              (read-line-help (cons next reverse-chars))))))




next up previous
Next: Über dieses Dokument

Michael Sperber [Mr. Preprocessor]
Thu Jul 1 15:52:24 MST 1999