0

如果我打电话给 Racket/Dr. 拍下以下代码:

> add1

我得到:

#<procedure:add1>

如果我使用一个名为 rackunit 的单元测试库,我试试这个:

(require rackunit)

(check-equal? add1 #<procedure:add1>)

测试失败并出现语法错误:

read: bad syntax `#<'

为什么会这样?

4

1 回答 1

2

对于多种类型的数据,write可以read返回什么。但是在程序的情况下你不能,因此它被输出为一个不可读的值

过程相等就像不透明的结构相等:它只检查身份。如果这就是您所需要的,您仍然可以将过程存储在某处并使用 check-equal? (例如,带有 add1 的列表将与带有 add1 的列表进行比较)。如果您需要实际检查程序在逻辑上是否相同,通常这是不可能的

于 2016-11-06T23:24:38.137 回答