【发布时间】:2013-09-14 07:08:58
【问题描述】:
我正在阅读一本书,Functional Programming Using F#,says(第 33 页),在高阶函数声明
部分我们已经看到了高阶内置函数,例如 (+) 和 (
在本节的末尾
高阶函数也可以通过在 let 声明中提供如下参数来定义:
let weight ro s = ro * s ** 3.0;;
然而,question that I asked earlier today(最初的标题是“我什么时候应该将我的函数编写为高阶函数”)的底部有一些有用的 cmets,这似乎让人怀疑这些示例是否实际上更高-排序函数。
wikipedia definition of higher-order function 是:
高阶函数(也称为函数形式、泛函或函子)是至少执行以下操作之一的函数: (i) 将一个或多个函数作为输入; (ii) 输出一个函数。
一方面,我可以看到像(+) 和weight 这样的函数可能被视为高阶函数,因为给定一个参数它们返回一个函数。另一方面,我可以看到它们被正确地视为柯里化函数。我正在学习 F# 作为一个自学项目,并希望清楚概念,因此本网站上的答案和讨论特别有帮助。
我的问题是,这些函数的正确术语是什么,也许更重要的是,人们通常如何使用术语“高阶函数”和“柯里化函数”?
【问题讨论】:
-
那个重量例子当然不是我认为的高阶函数。它需要几个浮点数并返回一个浮点数。这只是一个函数。
-
@Kit 来自 Tomas Petricek 的回答,柯里化函数是高阶函数的特例。在
weight示例中,weight ro返回一个float -> float函数,因此技术上 是一个高阶函数。但更常见的是称它为 curried 函数,就像我的宠物 Fido 更常见的称呼是狗而不是哺乳动物一样。 -
哎呀,我的(基本)错误。 ;-)
标签: f# functional-programming functor higher-order-functions currying