如何定义一个函数来检查2个函数是否在Scheme中返回相等的值?
这是我目前的代码但是错误!
(define (equal-value f1 f2)
(define f1_result (lambda (x) (f1 x)))
(define f2_result (lambda (x) (f2 x)))
(if (equal? f1_result f2_result) true false)
)
关于出了什么问题的任何想法?
答案 0 :(得分:1)
一些问题:
x
未定义。您需要传递x
作为参数,或在其他地方定义它。 f1_result
和f2_result
实际上是函数,而不是值。修复代码:
(define (equal-value f1 f2 x)
(define f1_result (f1 x))
(define f2_result (f2 x))
(equal? f1_result f2_result))
这可以进一步压缩:
(define (equal-value f1 f2 x)
(equal? (f1 x) (f2 x)))
以下是其用法示例:
; Defining two functions
(define func1 (lambda (x) (+ x 5)))
(define func2 (lambda (x) (* x 2)))
(equal-value func1 func2 3) ; will return #f
(equal-value func1 func2 5) ; will return #t
此外,您不需要函数调用来执行此操作;您可以直接在任何地方执行相等检查。