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">;Kleinbus

(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 15)</run>

=== Kleingruppenbuchung ===

<code id="5cfd7810382cc">(define kleingruppenbuchung
  (lambda (bus hotel)
    (cond ((null? 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 ((null? 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 (check-in bus3813 hilberthotel))</code>

<run id="5cfdf3b680b51">(zeig-mir hilberthotel 30)</run>

=== Umzug nach gerade ===