; logistic map

(define r #f)
(define x #f)

(define (reset z)
  (set! r z)
  (set! x 0.5))

(define (logistic)
  (let ((new-x (* r x (- 1 x))))
    (set! x new-x)
    x))

(define (drop n)
  (do ((n n (- n 1))) ((zero? n))
    (logistic)))

(define (take n)
  (let loop ((n n) (zs (list)))
    (if (zero? n) (reverse zs)
      (loop (- n 1) (cons (logistic) zs)))))

(reset 0.75)
(drop 1000)
(display (take 10)) (newline)

(reset 1.75)
(drop 1000)
(display (take 10)) (newline)

(reset 2.75)
(drop 1000)
(display (take 10)) (newline)

(reset 3.75)
(drop 1000)
(display (take 10)) (newline)