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