gpt4 book ai didi

f# - 折叠选项列表

转载 作者:行者123 更新时间:2023-12-03 04:44:39 25 4
gpt4 key购买 nike

给定一个列表[Some 1;一些 2; Some 3] 我想要一个输出 Some 6 。给定一个列表 [Some 1; None] 应该产生 None

但我发现以干净的方式实现这一目标比我想象的要困难一些。

我能想到的最好的就是这个

let someNums = [Some 1; Some 2; Some 3]
someNums
|> List.reduce (fun st v ->
Option.bind (fun x ->
Option.map (fun y -> x + y) st) v )

最佳答案

let lift op a b =
match a, b with
| Some av, Some bv -> Some(op av bv)
| _, _ -> None

let plus = lift (+)

[Some 1; Some 2; Some 3]
|> List.reduce plus
// val it : int option = Some 6


[Some 1; None]
|> List.reduce plus
// val it : int option = None

有折叠

[Some 1; None]
|> List.fold plus (Some 0)
// val it : int option = None

[Some 1; Some 2; Some 3]
|> List.fold plus (Some 0)
// val it : int option = Some 6

[Some 1; None; Some 2]
|> List.fold plus (Some 0)
// val it : int option = None

关于f# - 折叠选项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com