重复流水线的F#语法
F#中是否有语法允许通过一系列函数以简洁的顺序进行管道化?比如说,重复流水线的F#语法,f#,F#,F#中是否有语法允许通过一系列函数以简洁的顺序进行管道化?比如说, x |> fun1 |> fun2 |> fun3 ... 或者是否有一种设计模式使得此任务变得不必要?在我的例子中,我正在制作一个(天真的)数独解算器,其功能如下所示: let reduceByRows poss = poss |> reduceBy (rowIndeces 1) |> reduceBy (rowIndeces 2) |> reduceBy (r
x |> fun1 |> fun2 |> fun3 ...
或者是否有一种设计模式使得此任务变得不必要?在我的例子中,我正在制作一个(天真的)数独解算器,其功能如下所示:
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)
有什么办法可以清理这样的东西吗?对我来说就像一堆垃圾。那怎么办
let reduceByRows poss =
Seq.fold (fun p i -> reduceBy (rowIndices i) p) poss {1..9}
一种方法是在流水线操作符上折叠,而不是在数据上折叠:
{1..9} |> Seq.map (rowIndices >> reduceBy)
|> Seq.fold (|>) poss
通常,如果fun1
、fun2
等具有相同的签名,则可以对一系列函数应用|>
,即重复流水线:
[
fun1;
fun2;
fun3;
//...
] |> List.fold (|>) x