我发现了一个代码段某处在线:
(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来测试代码.