功能比较'在Scheme中返回值?

时间:2014-11-07 07:20:38

标签: scheme

如何定义一个函数来检查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) 
  )

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:1)

一些问题:

  • x未定义。您需要传递x作为参数,或在其他地方定义它。
  • 此外,在您的代码中,f1_resultf2_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

此外,您不需要函数调用来执行此操作;您可以直接在任何地方执行相等检查。