首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#如何调用此函数5次?

F#如何调用此函数5次?
EN

Stack Overflow用户
提问于 2020-12-03 20:07:45
回答 2查看 171关注 0票数 0

如何调用此函数f 5或倍,以便下次调用它时,函数f的返回值将是f函数的输入值?

代码语言:javascript
复制
let test x = x + 1
let test2 (f : int -> int) = 
    f 1    
test2 test
EN

回答 2

Stack Overflow用户

发布于 2020-12-05 19:21:09

您可以使用组合: f /f。F#中的运算符是>>。

代码语言:javascript
复制
let test x = x + 1
let test2 (f : int -> int) = 
    let g = [1..5]
                |> List.map (fun _ -> f)
                |> List.reduce (>>)
    g 1

test2 test // 6

在上面的代码中,g函数等价于

代码语言:javascript
复制
let g = f >> f >> f >> f >> f

将函数组合5次,即以输出作为下一个函数的输入。

map操作创建函数的5份副本: f;f

代码语言:javascript
复制
 f >> f  // [f; f; f]
 (f >> f ) >> f // [f; f]
 (f >> f >> f ) >> f // [ f ]
 (f >> f >> f >> f ) >> f
票数 1
EN

Stack Overflow用户

发布于 2020-12-09 15:33:04

下面是解决这个问题的另一种方法,使用递归,这样您就可以随意地控制重复f的次数。

代码语言:javascript
复制
let repeater repeat f init =
    match repeat with
    | 0 -> init
    | _ -> repeater (repeat - 1) f (f init)

要使用它,您可以这样称呼它:

代码语言:javascript
复制
let test x = x + 1

let res1 = repeater 5 test 1 // Gives 6

这样做的好处是你可以重复多次。您还可以使用第一个参数或前两个参数:

代码语言:javascript
复制
let repeatFiveTimes = repeater 5
let res2 = repeatFiveTimes test 1

let repeatTestFiveTimes = repeater 5 test
let res3 = repeatTestFiveTimes 1

并为我们的特定用例获得一个可重用的函数。

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

https://stackoverflow.com/questions/65133337

复制
相关文章

相似问题

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