什么时候应该以咖喱形式写我的功能?不符合我的想法,需要纠正自己.
作为我学习链接的一部分,这是我从函数currying中理解的.以下是一个例子:
def curry2(f):
"""Returns a function g such that g(x)(y) == f(x, y)
>>> from operator import add
>>> add_three = curry2(add)(3)
>>> add_three(4)
"""
def g(x):
def h(y):
return f(x, y)
return h
return g
Run Code Online (Sandbox Code Playgroud)
在任何应用程序中,如果我知道参数的数量是固定的(比如2个参数)而函数名称是normalise_range(比如说),那么我将定义def normalise_range(x, y):函数并直接通过调用在我的应用程序中使用它normalise_range(x, y).
在任何应用程序中,如果我知道,参数的数量是固定的(比如2个参数),但函数名称是变化的(可以是normalise_range/ average/我不知道..),那么我将使用def curry2(f):如上所示,将接受所有带有两个参数的函数(固定).
我的问题:
我正在阅读一本书,使用F#进行功能编程,其中说明(第33页),在高阶函数声明部分
我们已经看到了高阶内置函数,如(+)和(<<)
在本节结尾处
也可以通过在let-declaration中提供如下参数来定义高阶函数:
Run Code Online (Sandbox Code Playgroud)let weight ro s = ro * s ** 3.0;;
然而,我在今天早些时候提出的一个问题的底部有一些有用的评论(最初的标题是"我什么时候应该把我的函数写成更高阶函数"),似乎对这些例子是否实际上更高有疑问 -订单功能.
在高阶函数的维基百科的定义是:
高阶函数(也是函数形式,函数或函子)是至少执行以下操作之一的函数:(i)将一个或多个函数作为输入; (ii)输出一项功能.
一方面,我可以看到函数类似(+),并且weight可能被视为高阶函数,因为给定一个参数它们返回一个函数.另一方面,我可以看到它们被恰当地视为咖喱功能.我正在学习F#作为一个自学项目,并希望明确这些概念,因此本网站的答案和讨论特别有用.
我的问题是,这些功能的正确用语是什么,也许更重要的是,人们通常如何使用"高阶函数"和"咖喱函数"这两个术语?
f# functional-programming currying functor higher-order-functions