我需要编写一个Scheme高阶函数,它将两个参数的函数作为参数,并返回函数的curried版本。到目前为止,我对这些功能非常了解:
(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高阶函数的问题,该函数将两个参数的函数作为其参数并返回该函数的curried版本。如何将这些概念连接在一起?提前谢谢你,我真的很感激。
答案 0 :(得分:4)
这是一个可能的解决方案:
(define (curry f)
(lambda (x)
(lambda (y)
(f x y))))
函数curry
接受函数f
并返回一个带有单个参数x的函数。 该函数,给定其参数的值,返回另一个带有参数y
的函数,并返回将原始函数f
应用于x
的结果, y
。因此,例如,(curry +)
会返回+
的咖喱版:
(((curry +) 3) 4) ; produces 7