(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)
(define baue-hilberthotel (lambda () (stream-cons #f (baue-hilberthotel))) ) (define hilberthotel (baue-hilberthotel))
(zeige-mir hilberthotel 11)
ausführen
(define einzelbuchung (lambda (val stm pos) (let ([old-pos pos]) (letrec ([shorten (lambda (val stm pos) (if (= pos 0) (if (eq? #f (stream-car stm)) (stream-cons val (stream-cdr stm)) (raise (string-append (number->string old-pos) " schon belegt mit: " (stream-car stm)))) (stream-cons (stream-car stm) (shorten val (stream-cdr stm) (- pos 1))) )) ]) (shorten val stm pos) ) ) ) )
(set! hilberthotel (einzelbuchung "Otto Grundmann" hilberthotel 3)) (zeige-mir hilberthotel 12)
(define baue-kleinbus (lambda (numb pers) (list numb pers))) (define kleinbus815 (baue-kleinbus 815 8))
(zeige-mir kleinbus815)
(define kleingruppenbuchung (lambda (hotel finite-bus) (letrec ([helper (lambda (hotel finite-bus pos) (if (not (empty? finite-bus)) (helper (einzelbuchung (car finite-bus) hotel pos) (+ pos 1)) (hotel) ) ) ]) (hotel finite-bus 0) ) ) ) (set! hilberthotel (kleingruppenbuchung kleinbus815 hilberthotel))
(zeig-mir hilberthotel 12)