Scheme子集的值与错误路径核验[#53]
Scheme子集的条件与闭包核验预期值,错误路径核验异常key。if不求值未选分支,只有 #f为假;返回闭包保留定义处的局部环境。每次run创建新用户环境。参数从左到右求值是这个子集的明确约定,define在表达式中的使用不声称符合完整Scheme标准。
example. Scheme if 的未选分支不求值[mce-lazy-if]
(run-scheme '((if #t 7 missing)))⇒ 7 · checked
example. Scheme 真值:0 选择真分支[mce-truth]
(run-scheme '((if 0 1 2)))⇒ 1 · checked
example. Scheme 返回闭包的局部环境结果[mce-closure]
(run-scheme '((define (make-adder x) (lambda (y) (+ x y)))
(define add-three (make-adder 3)) (add-three 4)))⇒ 7 · checked
example. Scheme 参数从左到右的求值结果[mce-order]
(run-scheme '((define x 0)
(list (begin (define x (+ x 1)) x)
(begin (define x (+ x 1)) x))))⇒ (1 2) · checked
example. Scheme missing 的未绑定异常[mce-unbound-test]
(run-scheme '(missing))
⇒ "expected exception: mce-unbound" · checked
example. Scheme 闭包的参数数量异常[mce-arity-test]
(run-scheme '(((lambda (x) x) 1 2)))
⇒ "expected exception: mce-arity" · checked
example. Scheme 数值调用的非过程异常[mce-call-test]
(run-scheme '((1 2)))
⇒ "expected exception: mce-not-procedure" · checked
example. Scheme if 的语法异常[mce-syntax-test]
(run-scheme '((if #t 1)))
⇒ "expected exception: mce-syntax" · checked
example. Scheme lambda 的重复参数异常[mce-params-test]
(run-scheme '((lambda (x x) x)))
⇒ "expected exception: mce-syntax" · checked
example. Scheme run 的独立环境拒绝未定义 x[mce-isolation]
(run-scheme '(x))
⇒ "expected exception: mce-unbound" · checked