在我上的一堂课中,我们使用旧的 R5RS 标准方案来解决 SICP 作业。我喜欢先测试开发,所以我认为单元测试框架会很好,我选择了 SchemeUnit 来编写小测试。
到目前为止,这工作得很好,只是在输出中测试原语(字符串、数字等),但是在尝试测试列表时遇到了障碍。这可能与用于运行测试的 Scheme 方言的差异有关:
foo.scm: (define a-list (list 2))
foo-tests.scm: (check-equal? a-list (list 2))
运行测试时的结果:
Unnamed test
FAILURE
name: check-equal?
location: tester.scm:22:3
actual: {2}
expected: (2)
为了使测试套件运行,我必须添加"#lang scheme/base
到 foo-tests.scm 和require
schemeunit 包的顶部。在 foo.scm 中,我需要在顶部拥有#lang r5rs
和。(#%provide (all-defined))
我猜列表在 R5RS 和“方案/基础”中的实现方式有所不同。有什么办法让他们一起工作吗?为什么会失败({} vs ())?