如何调用此函数f 5或倍,以便下次调用它时,函数f的返回值将是f函数的输入值?
let test x = x + 1
let test2 (f : int -> int) =
f 1
test2 test发布于 2020-12-05 19:21:09
您可以使用组合: f /f。F#中的运算符是>>。
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函数等价于
let g = f >> f >> f >> f >> f将函数组合5次,即以输出作为下一个函数的输入。
map操作创建函数的5份副本: f;f
f >> f // [f; f; f]
(f >> f ) >> f // [f; f]
(f >> f >> f ) >> f // [ f ]
(f >> f >> f >> f ) >> f发布于 2020-12-09 15:33:04
下面是解决这个问题的另一种方法,使用递归,这样您就可以随意地控制重复f的次数。
let repeater repeat f init =
match repeat with
| 0 -> init
| _ -> repeater (repeat - 1) f (f init)要使用它,您可以这样称呼它:
let test x = x + 1
let res1 = repeater 5 test 1 // Gives 6这样做的好处是你可以重复多次。您还可以使用第一个参数或前两个参数:
let repeatFiveTimes = repeater 5
let res2 = repeatFiveTimes test 1
let repeatTestFiveTimes = repeater 5 test
let res3 = repeatTestFiveTimes 1并为我们的特定用例获得一个可重用的函数。
https://stackoverflow.com/questions/65133337
复制相似问题