IIm18-Kreativaufgabe1
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
== Aufgabenstellung ==
Modellieren Sie die skurrilen Deutungen von Unendlichkeit am Beispiel [https://web1.hszg.de/cwagenknecht-lehre/TI/Berechenbarkeitstheorie/VL/hilbertbus-CW.pdf ”Hilbertbus“] im ProgrammingWiki.
Wer wohnt in Zimmer 234? Hinweis: Verwenden Sie streams.
Arbeiten Sie im Team an Verbesserungen und ggf. an Erweiterungen.
=== Hilfsfunktionen ===
<code id="5cfd7282efed6">
;Streambehandlung
(define stream-car car)
(define stream-cdr
(lambda (stm)
(force (cdr stm))))
;; Konstruktoren
(define-macro (stream-cons head tail)
`(cons ,head (delay ,tail)))
(define stream-item
(lambda (str k)
(if (= k 0)
(stream-car str)
(stream-item (stream-cdr str) (- k 1)))))
</code>
=== Hotel bauen ===
<code id="5cfd7282eff44">(define baue-hilberthotel
(lambda ()
(stream-cons #f (baue-hilberthotel)))
)
</code>
<code id="5cfd7282effa7">(define hilberthotel (baue-hilberthotel))</code>
<code id="5cfd7282f0006">(define zeig-mir
(lambda (stm n)
(cond
((= n 0)
(cond
((null? stm) (display ""))
(else
(display "...\n"))))
(else
(display (stream-car stm))
(display ", ")
(zeig-mir (stream-cdr stm) (- n 1))))))
</code>
<run id="5cf7eff092710">(zeig-mir hilberthotel 12)</run>
=== Einzelbuchung ===
<code id="5cfd781038155">(define einzelbuchung
(lambda (s str roomold)
(let ([s s] [str str] [room roomold])
(letrec
((helper
(lambda (s str room)
(cond ((= room 0)
(cond ((eq? (stream-car str) #f)
(stream-cons s (stream-cdr str)))
(else
(string-append "Error in einzelbuchung: Zimmer " (format "~a " roomold) " ist belegt. Hier wohnt " (stream-car str) ".")
)))
(else
(stream-cons (stream-car str) (helper s (stream-cdr str) (- room 1))
)))
)))
(helper s str room)))))
(set! hilberthotel (einzelbuchung "Otto Grundmann" hilberthotel 3))
(set! hilberthotel (einzelbuchung "Hella Milkel" hilberthotel 2))
(set! hilberthotel (einzelbuchung "Heribert Wuischke" hilberthotel 7))</code>
<run id="5cfd781038385">(zeig-mir hilberthotel 15)</run>
=== Baue Kleinbus ===
<code id="5cfd781038203">
(define baue-kleinbus
(lambda (nr anzahl)
(let ([anz anzahl] [nr nr] )
(letrec
((helper
(lambda (anz)
(cond
((< anz 0)
(display ""))
(else (stream-cons (cons nr (- anzahl anz)) (helper ( - anz 1)))))
)))
(helper anz)
))))
(define kleinbus0815 (baue-kleinbus 815 8))</code>
<run id="5cfd781038469">(zeig-mir kleinbus0815 8)</run>
=== Kleingruppenbuchung ===
<code id="5cfd7810382cc">(define kleingruppenbuchung
(lambda (bus hotel)
(cond ((js-undefined? bus) hotel)
(else
(cond ((eq? (stream-car hotel) #f)
(stream-cons (stream-car bus) (kleingruppenbuchung (stream-cdr bus) (stream-cdr hotel)))
)
(else
(stream-cons (stream-car hotel) (kleingruppenbuchung bus (stream-cdr hotel)))))))))
(set! hilberthotel (kleingruppenbuchung kleinbus0815 hilberthotel))</code>
<run id="5cfdf3b680ae5">(zeig-mir hilberthotel 15)</run>
=== baue Hilbertbus ===
<code id="5cfdf3b680991">; Hilbertbus
(define baue-hilbertbus
(lambda (nr)
(let ([anz 0] [nr nr] )
(letrec
((helper
(lambda (anz)
(stream-cons (cons nr anz) (helper (+ anz 1)))))
)
(helper anz)
))))
(define bus3813 (baue-hilbertbus 3813))</code>
=== check-in Hilbertbusgäste ===
<code id="5cfdf3b680a45">(define check-in
(lambda (bus hotel)
(cond ((js-undefined? bus) hotel)
(else
(cond ((eq? (stream-car hotel) #f)
(stream-cons (stream-car bus) (check-in (stream-cdr bus) (stream-cdr hotel)))
)
(else
(stream-cons (stream-car hotel) (check-in bus (stream-cdr hotel)))))))))
(set! hilberthotel (check-in bus3813 hilberthotel))</code>
<run id="5cfdf3b680b51">(zeig-mir hilberthotel 30)</run>
=== Umzug nach gerade ===
<code>(define gehe-in-gerade
(lambda (stm)
(let ([stm stm] [index 0])
(letrec
((helper
(lambda (stm index)
(cond
([even? index] (stream-cons (stream-car stm) (helper (stream-cdr stm) (+ index 1))))
(else (stream-cons #f (helper stm (+ index 1)))))
)))
(helper stm index)))))
(set! hilberthotel (gehe-in-gerade hilberthotel))
(define bus33 (baue-hilbertbus 33))
(set! hilberthotel (check-in bus33 hilberthotel))</code>
<run>(zeig-mir hilberthotel 30)</run>