【问题标题】:Is it possible to use rackunit in DrRacket with language set to sicp, and if so, how?是否可以在语言设置为 sicp 的 DrRacket 中使用 rackunit,如果可以,如何使用?
【发布时间】:2020-09-12 00:28:58
【问题描述】:

我开始使用 DrRacket 处理 SICP。我安装了 sicp 包,并在单元测试文件的顶部声明了 #lang sicp,然后声明了 (require rackunit "xxx.scm"),但我收到了 unbound identifier 错误。是不是有错误,还是不能这样用sicp包的rackunit?

【问题讨论】:

标签: racket sicp rackunit


【解决方案1】:

您需要使用#%require

#%require实际上是球拍最底层的原始类型,与require略有不同:

#lang sicp
(#%require rackunit "xxx.scm")

您要测试的文件成为一个模块,因此您可以通过提供要公开的标识符从其他代码中使用它:

(#%provide procedure-name)

您也可以只需要一些所需的表格。例如。 errortime 来自 racket/base

(#%require (only racket/base error time))

查找它们所在位置的提示是搜索在线手册或从 DrRacket 中的帮助 > Racket 文档。例如。这是一个搜索error 的示例,您有很多选择,但以球拍为前缀的是您要查找的。​​p>

注意:并非所有形式都兼容跨语言。例如。 R5RS 与 #lang racket

有不同的 pair 实现

【讨论】:

  • 嗯好的,代码现在在不同的地方出错,unbound identifier 在第一次引用源文件中定义的函数时出错。有任何想法吗?我正在调用 check-equal? 来测试源代码。
  • @RodPValley 你必须这样使用:#lang sicp 使用(#%require rackunit "test.scm")(#%provide a-function-name)
  • 我现在明白了,我没有意识到我需要将provide#%require 结合使用。现在可以用了,谢谢大家的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多