Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重复流水线的F#语法_F# - Fatal编程技术网

重复流水线的F#语法

重复流水线的F#语法,f#,F#,F#中是否有语法允许通过一系列函数以简洁的顺序进行管道化?比如说, x |> fun1 |> fun2 |> fun3 ... 或者是否有一种设计模式使得此任务变得不必要?在我的例子中,我正在制作一个(天真的)数独解算器,其功能如下所示: let reduceByRows poss = poss |> reduceBy (rowIndeces 1) |> reduceBy (rowIndeces 2) |> reduceBy (r

F#中是否有语法允许通过一系列函数以简洁的顺序进行管道化?比如说,

    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