2013-11-20 90 views
0

我想知道是否有人對編寫mandelbrot流有任何建議。我寫了以下函數來幫助我:Mandelbrot在計劃中設置

(define (make-complex a b) (cons a b)) 
(define (real-coeff c) (car c)) 
(define (imag-coeff c) (cdr c)) 
(define (c-add c d) 
     (make-complex (+ (real-coeff c) (real-coeff d)) 
        (+ (imag-coeff c) (imag-coeff d)))) 
(define (c-mult c d) 
    (make-complex (- (* (real-coeff c) (real-coeff d)) 
        (* (imag-coeff c) (imag-coeff d))) 
       (+ (* (real-coeff c) (imag-coeff d)) 
        (* (imag-coeff c) (real-coeff d))))) 
(define (c-length c) 
    (define (square x) (* x x)) 
     (sqrt (+ (square (real-coeff c)) 
       (square (imag-coeff c))))) 

我有那個fz(x)= x2 + z。該流應返回:a,fz(a),fz(fz(a)),fz(fz(fz(a)))。我很困惑如何使用我編寫的函數來創建具有此輸出的流。任何人有什麼好的建議,以何去何從?

+2

您是否知道Scheme對複雜數字有內置支持? – uselpa

+0

您是否知道Scheme對流有第​​三方庫支持? – GoZoner

+1

我不知道這兩件事。我從發帖中學到了很多東西。 –

回答

3

開始與z值,讓你的功能fz(x),如:

(define (make-fz z) (lambda (x) (+ z (* 2 x)))) 

現在,使用SRFI-41流庫,定義正如你指出一個流: 試試吧(與z0):

> (stream->list (stream-take 10 (stream-iterate (make-fz 0) 1))) 
(1 2 4 8 16 32 64 128 256 512) 

注意:stream-iterate的定義是這樣的:

(define-stream (stream-iterate fz a) 
    (stream-cons a (stream-iterate fz (fz a)))) 
+1

由於'(stream-> list(stream-take n x))'是一個常見的用例,所以''(stream-> list n x)'是一個簡短的例子。 –

1

正如uselpa所說,Scheme內置了複數。你提到的是作爲功能如下:

  • make-rectangular
  • real-part
  • imag-part
  • +
  • *
  • magnitude

至於你的問題的第二部分,什麼是z?不知道你想要什麼就很難回答這個問題。