BuK/IIm20/Vorlesung 2 Grüning

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
== Hilbert Hotel ==
<code id="605dd0651e5eb">
(define stream-car car)

(define stream-cdr
  (lambda (stm)
    (force (cdr stm))))

(define-macro (stream-cons head tail)
  `(cons ,head (delay ,tail)))

(define stream?
  (lambda (stm)
    (and (pair? stm) (promise? (cdr stm)))))

(define stream-map
  (lambda (proz stm)
    (stream-cons (proz (stream-car stm)) (stream-map proz (stream-cdr stm)))))

(define show-stream
  (lambda (stm n)
    (letrec
        ([show
          (lambda (stm n ls)
            (if (= n 0)
                (apply display (append ls (list "...")))
                (show (stream-cdr stm) (- n 1) (append ls (list (stream-car stm) ", ")))))])
      (show stm n ()))))

(define zeige-mir show-stream)

</code>

<code id="605dd0651e650">

(define baue-hilberthotel
  (lambda ()
    (stream-cons #f (baue-hilberthotel)))
  )

(define hilberthotel (baue-hilberthotel))
</code>

<run id="605dd0651e6ad">
(zeige-mir hilberthotel 11)
</run>

<code id="605dd4de3e11c">
(define einzelbuchung
    (lambda (val stm pos)
        (letrec
            ([shorten
                (lambda (val stm pos nstm)
                (if (= pos 0)
                    (append nstm val)
                    (shorten val (stream-car stm) (- pos 1) (append nstm (stream-car stm)))
                    ))
            ]))

        ))

</code>
<run id="605dd4de3e1e0">
(set! hilberthotel (einzelbuchung "Otto Grundmann" hilberthotel 3))
(zeig-mir hilberthotel 12)
</run>