typed-racket/typed-racket-test/succeed/mandelbrot.rkt
2014-12-16 10:07:25 -05:00

32 lines
903 B
Racket

#lang typed/racket/base #:optimize
(require racket/future racket/flonum)
(define: MAX-ITERS : Positive-Fixnum 50)
(define MAX-DIST 2.0)
(define: N : Positive-Fixnum 512)
(: mandelbrot-point : Integer Integer -> Integer)
(define (mandelbrot-point x y)
(define c
(+ (- (/ (* 2.0 (->fl x)) N) 1.5)
(* 0.0+1.0i (- (/ (* 2.0 (->fl y)) N) 1.0))))
(let loop ((i 0) (z 0.0+0.0i))
(cond
[(> i MAX-ITERS) (char->integer #\*)]
[(> (magnitude z) MAX-DIST)
(char->integer #\space)]
[else (loop (add1 i) (+ (* z z) c))])))
(: fs (Listof (Futureof Bytes)))
(define fs
(for/list ([y (in-range N)])
(let ([bstr (make-bytes N)])
(future
(lambda ()
(for ([x (in-range N)])
(bytes-set! bstr x (mandelbrot-point x y)))
bstr)))))
(lambda ()
(for: ([f : (Futureof Bytes) (in-list fs)])
(write-bytes (touch f))
(newline)))