Bergervei/Streams

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
<code id="607c64c02738c">
(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)
    (if (= n 0)
        (display "...")
        (begin
          (display (stream-car stm))
          (show-stream (stream-cdr stm) (- n 1))))))
</code>

Natürliche Zahlen:

<code id="607c64c027409">
(define natstream
  (lambda (n)
    (stream-cons n (natstream (+ n 1)))))

(define natzahlen (natstream 0))
</code> 

<run id="607c64c02748c">
(show-stream natzahlen 30)
</run>