相关疑难解决方法(0)

如何测试两个函数是否相同?

我发现了一个代码段某处在线:

(letrec
  ([id (lambda (v) v)]
   [ctx0 (lambda (v) `(k ,v))]
         .....
         .....
         (if (memq ctx (list ctx0 id)) <---- condition always return false
         .....
Run Code Online (Sandbox Code Playgroud)

其中ctx也是一个函数:

但是我永远不会让test语句返回true.

然后我有以下测试:

(define ctx0 (lambda (v) `(k ,v)))
(define ctx1 (lambda (v) `(k ,v)))
(eq? ctx0 ctx1)
=> #f
(eqv? ctx0 ctx1)
=> #f
(equal? ctx0 ctx1)
=> #f
Run Code Online (Sandbox Code Playgroud)

这让我怀疑两个函数总是不同,因为它们有不同的内存位置.

但是如果可以将函数与其他函数进行比较,我该如何测试两个函数是否相同?如果他们有不同的变量名怎么办?例如:

(lambda (x) (+ x 1))(lambda (y) (+ y 1))

PS我使用DrRacket来测试代码.

scheme functional-programming racket

7
推荐指数
1
解决办法
1476
查看次数

标签 统计

functional-programming ×1

racket ×1

scheme ×1