我需要编写一个Scheme高阶函数,它以两个参数的函数作为参数,并返回函数的匆匆版本。到目前为止,我对咖喱功能的理解是:
(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高级函数的问题,该函数以两个参数的函数为参数,并返回函数的匆匆版本。如何将这些概念联系在一起?提前谢谢你,我真的很感激。
发布于 2016-03-04 07:39:43
以下是一个可能的解决方案:
(define (curry f)
(lambda (x)
(lambda (y)
(f x y))))函数curry接受函数f并返回带有单个参数x的函数,该函数给定参数值,返回另一个函数,该函数接受参数y,并返回将原始函数f应用于x和y的结果。因此,例如,(curry +)返回一个+的咖喱版本
(((curry +) 3) 4) ; produces 7https://stackoverflow.com/questions/35790234
复制相似问题