首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为高阶函数的结果,人们将如何创建函数?

作为高阶函数的结果,人们将如何创建函数?
EN

Stack Overflow用户
提问于 2014-09-11 03:24:26
回答 2查看 305关注 0票数 0

我正在研究高阶函数的定义。基于该定义,高阶函数可以接受值或函数,并创建一个函数或值作为输出。我正在读F#和Erlang的书,到目前为止,我还没有找到一个函数作为结果创建函数的地方,或者我已经看到了它,它没有作为结果函数出现在我面前。我理解了一个函数,将函数作为输入(比如Action或Func<> in C#),这里是一个基于F#上的wikibook的示例代码

代码语言:javascript
复制
open System

let square x = x * x    

let cube x = x * x * x

let sign x =
    if x > 0 then "positive"
    else if x < 0 then "negative"
    else "zero"

let passFive f = (f 5)

在这个例子中,passFile是一个高阶函数,它反过来创建一个函数作为输出吗?如果是的话,难道没有人能给我举一个简单的例子,说明函数产生函数的结果吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 04:29:46

最简单的例子只是一个匆匆的函数。

拿走

代码语言:javascript
复制
let multiply (a : int) (b : int) : int = a * b

例如。只是写这是个签名你有个类似的东西

代码语言:javascript
复制
int -> int -> int 

这真的是

代码语言:javascript
复制
int -> (int -> int)

因此,这个,一个接受一个整数(a)并返回另一个函数的函数:

代码语言:javascript
复制
multiply 5 == fun b -> 5 * b

正如您所看到的,在使用curried函数时,函数编程/ F#中到处都是高阶函数。

您在另一边的示例可以重写为:

代码语言:javascript
复制
let passFive (f : int -> 'b) : 'b = f 5

因此,这是一个高阶函数,它接受一个函数(f),但它不返回一个函数--顾名思义,它将一个5传递给您调用它的每个函数(另一个常用名称可能是应用5)。

票数 4
EN

Stack Overflow用户

发布于 2014-09-11 06:16:55

另一个例子是组合运算符(>>)(<<)。这些函数包含两个函数,并将它们组合成一个单独的函数。例如:

代码语言:javascript
复制
let twoNPlusOne = (*) 2 >> (+) 1

操作符的类型是('a -> 'b) -> ('b -> 'c) -> ('a -> 'c);在本例中,所有类型变量都是int,因为操作数都是int -> int,结果也是如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25778534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档