[ create a new paste ] login | about

Link: http://codepad.org/0iV02ShG    [ raw code | output | fork ]

Scheme, pasted on Apr 23:
(require (lib "40.ss" "srfi"))
(require (lib "43.ss" "srfi"))

(define (pi-summands n)
   (stream-cons (/ 1.0 n)
	    (stream-map - (pi-summands (+ n 2)))))

(define (scale-stream stream factor)
    (stream-map (lambda (x) (* x factor)) stream))

(define (add-streams s1 s2)
  (stream-map + s1 s2))

(define (partial-sums s)
  (define sums
    (stream-cons 0
		 (add-streams s sums)))
  (stream-cdr sums))

(define pi-stream
   (scale-stream (partial-sums (pi-summands 1)) 4))

(define (stream-ref s n)
  (if (= n 0)
      (stream-car s)
      (stream-ref (stream-cdr s) (- n 1))))

(define (square x) (* x x))

(define (euler-transform s)
  (let ((s0 (stream-ref s 0))
	(s1 (stream-ref s 1))
	(s2 (stream-ref s 2)))
    (stream-cons (- s2 (/ (square (- s2 s1))
			  (+ s0 (* -2 s1) s2)))
		 (euler-transform (stream-cdr s)))))

(define (make-tableau transform s)
	(stream-cons s
		     (make-tableau transform
				   (transform s))))

(define (accelerated-sequence transform s)
	(stream-map stream-car
		    (make-tableau transform s)))

(define head stream-car)
(define tail
  (lambda (stream) (stream-cdr stream)))

(letrec ( 
   (n 10) 
   (loop (lambda (s) 
      (if (not (= n 0)) 
          (begin (set! n (- n 1)) 
                 (write (head s)) 
                 (newline)
                 (loop (tail s))))))) 
  (loop pi-stream))


Output:
1
2
3
4
5
6
7
8
9
10
4.0
2.666666666666667
3.466666666666667
2.8952380952380956
3.3396825396825403
2.9760461760461765
3.2837384837384844
3.017071817071818
3.2523659347188767
3.0418396189294032


Create a new paste based on this one


Comments: