racket/collects/tests/eopl/chapter2/sec2.1.rkt
David Van Horn 7491e172ea EOPL test suite re-written in Racket-based #lang eopl and rackunit
The eopl language is now racket-based rather than mzscheme-based.  This
test-suite, which was originally distributed on the book's web-site has
been re-written in the new language.  Changes include dropping all
drscheme-init.scm and top.scm files.  Remaining files were renamed to
use the .rkt extension and edited to use the #lang syntax (instead of
modulue).  Require and provide forms were changed to reflect racket's
syntax instead of mzscheme's (eg, only-in vs. only).  Several
occurrences of one-armed ifs were changed to use when and unless.  All
tests have been run successfully.
2012-02-24 14:46:18 -05:00

95 lines
2.1 KiB
Racket
Executable File

#lang eopl
(require tests/eopl/private/utils)
(let ()
;; Unary Representation
;; page 33
(define zero (lambda () '()))
(define is-zero? (lambda (n) (null? n)))
(define successor (lambda (n) (cons #t n)))
(define predecessor (lambda (n) (cdr n)))
(define plus
(lambda (x y)
(if (is-zero? x)
y
(successor (plus (predecessor x) y)))))
(define scheme-int->my-int
(lambda (n)
(if (zero? n) (zero)
(successor (scheme-int->my-int (- n 1))))))
(define my-int->scheme-int
(lambda (x)
(if (is-zero? x) 0
(+ 1 (my-int->scheme-int (predecessor x))))))
(check-equal?
(my-int->scheme-int
(plus
(scheme-int->my-int 3)
(scheme-int->my-int 7)))
10)
;(report-unit-tests-completed 'unary-representation)
)
(let ()
;; Scheme number representation
;; page 33
(define zero (lambda () 0))
(define is-zero? (lambda (n) (zero? n)))
(define successor (lambda (n) (+ n 1)))
(define predecessor (lambda (n) (- n 1)))
(define plus
(lambda (x y)
(if (is-zero? x)
y
(successor (plus (predecessor x) y)))))
(check-equal? (plus 3 7) 10)
;(report-unit-tests-completed 'scheme-number-representation)
)
(let ()
;; Reverse-number representation
;; Represent n by the Scheme number 5-n
(define zero (lambda () 5))
(define is-zero? (lambda (n) (= n 5)))
(define successor (lambda (n) (- n 5)))
(define predecessor (lambda (n) (+ n 5)))
;; unchanged below here!
(define plus
(lambda (x y)
(if (is-zero? x)
y
(successor (plus (predecessor x) y)))))
(define scheme-int->my-int
(lambda (n)
(if (zero? n) (zero)
(successor (scheme-int->my-int (- n 1))))))
(define my-int->scheme-int
(lambda (x)
(if (is-zero? x) 0
(+ 1 (my-int->scheme-int (predecessor x))))))
(check-equal?
(my-int->scheme-int
(plus
(scheme-int->my-int 3)
(scheme-int->my-int 7)))
10)
;(report-unit-tests-completed 'reverse-number-representation)
)