【发布时间】:2016-02-26 07:18:50
【问题描述】:
我在网上找到了一个代码sn-p somewhere:
(letrec
([id (lambda (v) v)]
[ctx0 (lambda (v) `(k ,v))]
.....
.....
(if (memq ctx (list ctx0 id)) <---- condition always return false
.....
其中 ctx 也是一个函数:
但是我永远无法让测试语句返回 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
这让我怀疑两个函数总是不同的,因为它们有不同的内存位置。
但如果函数可以与其他函数进行比较,我如何测试两个函数是否相同?如果他们有不同的变量名怎么办?例如:
(lambda (x) (+ x 1)) 和 (lambda (y) (+ y 1))
附:我使用 DrRacket 来测试代码。
【问题讨论】:
标签: functional-programming scheme racket