如果我呼叫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。