[ create a new paste ] login | about

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

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

(define ones (stream-cons 1 ones))

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

(define integers (stream-cons 1 (add-streams ones integers)))

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

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

(define (integrate-series s)
  (stream-map / s integers))

(define exp-series
  (stream-cons 1 (integrate-series exp-series)))

(define cosine-series
  (stream-cons 1 (stream-map - (integrate-series sine-series))))

(define sine-series
  (stream-cons 0 (integrate-series cosine-series)))

(define (mul-series s1 s2)
  (stream-cons (* (stream-car s1) (stream-car s2))
               (add-streams (scale-stream (stream-cdr s2) (stream-car s1))
                            (mul-series (stream-cdr s1) s2))))

(define (invert-unit-series S)
  (stream-cons 1
	       (mul-series (stream-map - (stream-cdr S))
			   (invert-unit-series S))))

(define (div-series s1 s2)
  (mul-series s1
	      (invert-unit-series s2)))

(define tan-series
  (div-series sine-series cosine-series))

(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 tan-series))


Output:
1
2
3
4
5
6
7
8
9
10
0
1
0
1/3
0
2/15
0
17/315
0
62/2835


Create a new paste based on this one


Comments: