2013-11-20 50 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?不知道你想要什么就很难回答这个问题。