| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #lang racket
- (require rackunit)
- (define (Mb-to-B n) (* n 1024 1024))
- (define MAX-BYTES (Mb-to-B 64))
- (define nil '())
- (custodian-limit-memory (current-custodian) MAX-BYTES)
- ; racket -l errortrace -t exercise-...
- ;; PREDEFINED CODE
- (define (filter predicate sequence)
- (cond
- [(null? sequence)
- nil]
- [(predicate (car sequence))
- (cons (car sequence) (filter predicate (cdr sequence)))]
- [else
- (filter predicate (cdr sequence))]))
- (define (accumulate op initial sequence)
- (if
- (empty? sequence)
- initial
- (op
- (car sequence)
- (accumulate op initial (cdr sequence)))))
- (define (enumerate-interval low high)
- (if
- (> low high)
- nil
- (cons
- low
- (enumerate-interval (+ low 1) high))))
- (define (enumerate-tree tree)
- (cond
- [(empty? tree) nil]
- [(not (pair? tree)) (list tree)]
- [else (append
- (enumerate-tree (car tree))
- (enumerate-tree (cdr tree)))]))
- ;; EXERCISE 2.34
- ; - implementation of Horner's rule
- (define (horner-eval x coefficient-sequence)
- (accumulate
- (lambda (this-coeff higher-terms)
- (+ (* higher-terms x) this-coeff))
- 0
- coefficient-sequence))
- ;; UNIT TESTS
- (define (check-equal?-with-output a b failure-msg)
- (display "checking for equality:") (newline)
- (display a) (newline)
- (display b) (newline)
- (check-equal? a b failure-msg))
- (define (run-test-newlines a-test-suite)
- (for-each
- (λ (elem)
- (display elem) (newline))
- (run-test a-test-suite)))
- (define exercise-test
- (test-suite
- "exercise test"
- #:before (λ () (display "before") (newline))
- #:after (λ () (display "after") (newline))
-
- (test-case
- "test case for horner-eval"
- (check-equal?
- (horner-eval 2 (list 1 3 0 5 0 1))
- 79
- "horner-eval does not work correctly"))
- ))
- (run-test exercise-test)
|