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应用原始函数的结果f
到 x
和 y
。因此,例如,(curry +)
returns +
:
的柯里化版本
(((curry +) 3) 4) ; produces 7
我需要编写一个 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应用原始函数的结果f
到 x
和 y
。因此,例如,(curry +)
returns +
:
(((curry +) 3) 4) ; produces 7