;;; CODE TO SUPPORT CHAPTER 3 OF STRUCTURE AND INTERPRETATION OF
;;; COMPUTER PROGRAMS
;;; NB. This code is *not* from the book
;;; In addition to code supplied here
;;;**For 3.4, might want parallel-execute as implemented for MIT Scheme
;;;**For 3.5, need stream special forms, which are not in Standard Scheme
;;For Section 3.1.2 -- written as suggested in footnote,
;; though the values of a, b, m may not be very "appropriately chosen"
(define (rand-update x)
(let ((a 27) (b 26) (m 127))
(modulo (+ (* a x) b) m)))
;;For Section 3.3.4, used by and-gate
;;Note: logical-and should test for valid signals, as logical-not does
(define (logical-and x y)
(if (and (= x 1) (= y 1))
1
0))
;;For Section 3.5 -- useful for looking at finite amounts of infinite streams
;;Print the first n elements of the stream s.
;;One version prints on one line, one on separate lines
(define (print-n s n)
(if (> n 0)
(begin (display (stream-car s))
(display ",")
(print-n (stream-cdr s) (- n 1)))))
(define (print-n s n)
(if (> n 0)
(begin (newline)
(display (stream-car s))
(print-n (stream-cdr s) (- n 1)))))
;;For Section 3.5.2, to check power series (exercises 3.59-3.62)
;;Evaluate and accumulate n terms of the series s at the given x
;;Uses horner-eval from ex 2.34
(define (eval-power-series s x n)
(horner-eval x (first-n-of-series s n)))
(define (first-n-of-series s n)
(if (= n 0)
'()
(cons (stream-car s) (first-n-of-series (stream-cdr s) (- n 1)))))