SchemeJS
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SchemeJS</language>
<run id="5ba79ebf1f8e1">
;Streambehandlung
(define stream-car car)
(define stream-cdr
(lambda (stm)
(force (cdr stm))))
;; Konstruktoren
(define-macro (stream-cons head tail)
`(cons ,head (delay ,tail)))
;; Operationen mit streams
(define make-stream
(lambda (seed proc)
(letrec
((stream-builder
(lambda (n)
(stream-cons n (stream-builder (proc n))))))
(stream-builder seed))))
(define stream-item
(lambda (str k)
(if (= k 0)
(stream-car str)
(stream-item (stream-cdr str) (- k 1)))))
(define stream-map
(lambda (f str)
(stream-cons
(f (stream-car str))
(stream-map f (stream-cdr str)))))
(define print-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 nat_zahlen (make-stream 0 (lambda (n) (+ n 1))))
(define generiere_aufzaehlbare_menge
(lambda (f)
(stream-map f nat_zahlen )))
(define zeig-mir print-stream)
(define hilbert
(lambda (n)
#f))
(define baue-hilberthotel (generiere_aufzaehlbare_menge hilbert))
(define hilberthotel baue-hilberthotel)
(zeig-mir hilberthotel 11)
(define einzelbuchung
(lambda (name stm pos)
(if (not (equal? (stream-item stm pos) #f))
(error "Fehler aufgetreten: Zimmer belegt.")
(cond
([and (= pos 0)(equal? (stream-item stm pos) #f)] (stream-cons name (stream-cdr stm)))
(else (stream-cons (stream-car stm) (einzelbuchung name (stream-cdr stm) (- pos 1))))))))
(set! hilberthotel (einzelbuchung "Otto Grundmann" hilberthotel 3))
(zeig-mir hilberthotel 12)
(set! hilberthotel (einzelbuchung "Hella Milkel" hilberthotel 2))
;(set! hilberthotel (einzelbuchung "Heribert Wuischke" hilberthotel 3))
(set! hilberthotel (einzelbuchung "Heribert Wuischke" hilberthotel 7))
(zeig-mir hilberthotel 12)
(define baue-kleinbus1
(lambda (name plaetze)
(cond
([= plaetze 0] (list (cons name plaetze)))
(else (cons (cons name plaetze) (baue-kleinbus1 name (- plaetze 1)))))))
(define umkehr
(lambda (ls)
(cond
([equal? (cdr ls) ()] (list (car ls)))
(else (append (umkehr (cdr ls)) (list (car ls)))))))
(define baue-kleinbus
(lambda (name plaetze)
(umkehr (baue-kleinbus1 name plaetze))))
(define kleinbus815 (baue-kleinbus 815 8))
(write kleinbus815)
</run>