22 lines
916 B
Scheme
22 lines
916 B
Scheme
(library (test-lib)
|
|
(export quote if or and not begin lambda let letrec set! cons make-vector box
|
|
car cdr vector-ref vector-length unbox + - * / pair? null? boolean? vector?
|
|
box? = < <= > >= eq? vector-set! set-box! canonicalize-result)
|
|
(import (rename (except (rnrs) /) (div /)) (rnrs mutable-pairs))
|
|
|
|
;; implement a box type since there is no box type in R6RS, even though it
|
|
;; may be included in our host implementations.
|
|
(define-record-type (box-record box box?) (fields (mutable value unbox set-box!)))
|
|
|
|
(define canonicalize-result
|
|
(lambda (x)
|
|
(cond
|
|
[(box? x) (vector 'box (canonicalize-result (unbox x)))]
|
|
[(vector? x) (vector-map canonicalize-result x)]
|
|
[(pair? x) (cons (canonicalize-result (car x))
|
|
(canonicalize-result (cdr x)))]
|
|
[(procedure? x) '#(procedure)]
|
|
[(eq? (if #f #f) x) '#(void)]
|
|
[else x]))))
|
|
|