如果我呼叫Racket/Dr.Racket,请输入以下代码:

> add1

我得到:
#<procedure:add1>

如果我正在使用一个名为rackunit的库进行单元测试,我将尝试执行以下操作:
(require rackunit)

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

测试失败,出现语法错误:
read: bad syntax `#<'

为什么会这样?

最佳答案

对于许多类型的数据,what you write can be read back但是在程序的情况下你不能,因此它被输出为一个unreadable value
过程等式类似于不透明的结构等式:它只检查标识如果这是你所需要的,你仍然可以把程序存储在某个地方并使用check equal(例如,带有add1的列表将与带有add1的列表进行比较)如果需要实际检查过程在逻辑上是否相同,this is not possible in general

09-25 16:06