
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.
95 lines
2.1 KiB
Racket
Executable File
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)
|
|
)
|
|
|
|
|
|
|