F#中是否有任何语法允许按顺序通过一系列函数进行流水线操作?例如,
x |> fun1 |> fun2 |> fun3 ...
Run Code Online (Sandbox Code Playgroud)
或者是否有一个设计模式,使这项任务不必要?在我的情况下,我正在制作一个(天真的)数独求解器并具有如下所示的函数:
let reduceByRows poss =
poss
|> reduceBy (rowIndeces 1) |> reduceBy (rowIndeces 2) |> reduceBy (rowIndeces 3)
|> reduceBy (rowIndeces 4) |> reduceBy (rowIndeces 5) |> reduceBy (rowIndeces 6)
|> reduceBy (rowIndeces 7) |> reduceBy (rowIndeces 8) |> reduceBy (rowIndeces 9)
Run Code Online (Sandbox Code Playgroud)
有没有办法清理这样的东西?
一种看待这种情况的方法是折叠流水线操作符|>而不是折叠数据:
{1..9} |> Seq.map (rowIndices >> reduceBy)
|> Seq.fold (|>) poss
Run Code Online (Sandbox Code Playgroud)
通常,如果fun1,fun2等具有相同的签名,则可以应用|>一系列函数,即重复流水线操作:
[
fun1;
fun2;
fun3;
//...
] |> List.fold (|>) x
Run Code Online (Sandbox Code Playgroud)
看起来像是折叠给我.关于什么
let reduceByRows poss =
Seq.fold (fun p i -> reduceBy (rowIndices i) p) poss {1..9}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |