我在 F# 4.0 中有以下代码
let processEscalation escalationAction (escalationEvents:UpdateCmd.Record list) =
printf "%A" Environment.NewLine
printf "Started %A" escalationAction
escalationEvents
|> List.iter ( fun x ->
printf "%A" Environment.NewLine
printf "escalation %A for with action: %A" x.incident_id escalationAction
service.PostAction(new Models.Action(x.incident_id, escalationAction, "escalated"))
|> Async.AwaitTask
|> ignore)
let ComposeEscalation() =
let escalationlevels = ["ESC1 REACHED"; "ESC2 REACHED"; "ESC3 REACHED"]
escalationlevels
|> List.map getEscalationEvents
|> List.iteri (fun i x -> processEscalation escalationlevels.[i] x)
Run Code Online (Sandbox Code Playgroud)
其中以下行是对返回 Task 的 C# 异步方法的调用
service.PostAction(new Models.Action(x.incident_id, escalationAction, "escalated"))
Run Code Online (Sandbox Code Playgroud)
compose escalation …
set.seed(1)
dat <- data.frame(ID = sample(letters,50,rep=TRUE))
dat %>%
group_by(ID) %>%
summarise(no_rows = length(ID))
Run Code Online (Sandbox Code Playgroud)
我有上面的代码,它创建了一个随机的字母样本。但是,即使为零,我也可以使汇总输出显示所有计数级别。
当我运行上面的代码时,有时会得到 20 行,有时会得到 25 行,等等。我希望每次都返回 26 行。
鉴于以下输入序列,我想生成所需的输出。我知道如果所有窗口都是固定长度,则 Seq.window 几乎可以用来获得所需的结果。但是,在这种情况下,它们不是固定长度,每当遇到“a”时,我想开始一个新序列。标准收藏库可以做到这一点吗?
let inputSequence =
["a"; "b"; "c";
"a"; "b"; "c"; "d";
"a"; "b";
"a"; "d"; "f";
"a"; "x"; "y"; "z"]
let desiredResult =
[["a"; "b"; "c";]
["a"; "b"; "c"; "d";]
["a"; "b"; ]
["a"; "d"; "f";]
["a"; "x"; "y"; "z"]]
Run Code Online (Sandbox Code Playgroud) 我使用辅助函数的chessie库来做ROP(monad) https://github.com/fsprojects/Chessie/blob/master/src/Chessie/ErrorHandling.fs
但是我不确定如何简洁地将以下三个功能组合在一起.其中twoInputFunc应该只有FUNC1和FUNC2返回成功进行评估.
val func1 : int -> Result<Tp1, 'a>
val func2 : string -> Result<Tp2, 'a>
val twoInputFunc : par1:Tp1 -> Tpar2:Tp2 -> Result<Ta,'a>
Run Code Online (Sandbox Code Playgroud)