# Div-series procedure

Use the results of exercises 3.60 and 3.61 to define a procedure div-series that divides two power series. Div-series should work for any two series, provided that the denominator series begins with a nonzero constant term. (If the denominator has a zero constant term, then div-series should signal an error.) Show how to use div-series together with the result of exercise 3.59 to generate the power series for tangent.

##### Authentication required

``````(define (stream-car stream) (car stream))

(define (stream-cdr stream) (force (cdr stream)))

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

(define (stream-map proc . list-of-stream)
(if (null? (car list-of-stream))
'()
(cons-stream
(apply proc
(map (lambda (s)
(stream-car s))
list-of-stream))
(apply stream-map
(cons proc (map (lambda (s)
(stream-cdr s))
list-of-stream))))))

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

(stream-map + s1 s2))

(define (mul-streams s1 s2)
(stream-map * s1 s2))

(define (div-streams s1 s2)
(stream-map / s1 s2))

(define ones (cons-stream 1 ones))

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

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

(check-equal? (stream-ref tan-series 0) 0)
(check-equal? (stream-ref tan-series 1) 1)
(check-equal? (stream-ref tan-series 2) 0)
(check-equal? (stream-ref tan-series 3) 1/3)``````