Scheme、高阶函数和柯里化函数

Scheme, higher order functions, and curried functions

我需要编写一个 Scheme 高阶函数,该函数将两个参数的函数作为其参数,returns 该函数的柯里化版本。到目前为止,我对柯里化函数的理解是这样的:

(define curriedFunction (lambda (x) 
        (if (positive? x)
            (lambda (y z) (+ x y z))
            (lambda (y z) (- x y z)))))

(display ((curriedFunction -5) 4 7))
(display "\n")
(display ((curriedFunction 5) 4 7))

如果 x 为负,则减去 x y 和 z。如果 x 为正,则将 x、y 和 z 相加。

关于高阶函数,我是这样理解的:

(display (map (lambda (x y) (* x y)) '(1 2 3) '(3 4 5)))

第三,我在将函数作为参数传递方面非常了解:

(define (function0 func x y)
        (func x y))

(define myFunction (lambda (x y)
        (* x y)))

(display (function0 myFunction 10 4))

在上面的代码中,我了解到函数 "myFunction" 也可以这样写:

(define (myFunction x y)
        (* x y))

所以现在你知道我在 Scheme 编程和语法方面的水平了。 现在回到回答编写一个 Scheme 高阶函数的问题,该函数将两个参数的函数作为其参数,returns 是该函数的柯里化版本。如何将这些概念联系在一起?提前谢谢你,我真的很感激。

这是一个可能的解决方案:

(define (curry f)
  (lambda (x)
    (lambda (y)
      (f x y))))

函数 curry 接受函数 f 和 returns 一个带有单个参数 x 的函数。 那个函数,给它的参数一个值,returns另一个接受参数的函数y和returns应用原始函数的结果fxy。因此,例如,(curry +) returns +:

的柯里化版本
(((curry +) 3) 4)  ;  produces 7