如何按名称命名f#管道参数?

如何按名称命名f#管道参数?,f#,pipeline,F#,Pipeline,我正试着做类似的事情 seq { 1..100 } |> Seq.sum |> pown 2 它甚至没有编译,因为pown期望't^'参数作为第一个参数,而我将它作为第二个参数,因为这是管道的默认行为。通过谷歌搜索,我没有找到让“pown”使用管道携带的参数作为第一个参数的方法。可能它有一些默认名称?您可以使用辅助功能: let flip f x y = f y x seq { 1L..100L } |> Seq.sum |> flip pown 2

我正试着做类似的事情

seq { 1..100 }
|> Seq.sum
|> pown 2

它甚至没有编译,因为pown期望't^'参数作为第一个参数,而我将它作为第二个参数,因为这是管道的默认行为。通过谷歌搜索,我没有找到让“pown”使用管道携带的参数作为第一个参数的方法。可能它有一些默认名称?

您可以使用辅助功能:

let flip f x y = f y x

seq { 1L..100L }
    |> Seq.sum
    |> flip pown 2

在标准库中设置翻转将非常方便:)

您可以使用辅助功能:

let flip f x y = f y x

seq { 1L..100L }
    |> Seq.sum
    |> flip pown 2

在标准库中使用翻转将非常方便:)

您可以使用lambda为传入值命名:

seq { 1..100 } 
|> Seq.sum 
|> (fun x -> pown x 2)

在上面,我将其命名为
x

您可以使用lambda为传入值命名:

seq { 1..100 } 
|> Seq.sum 
|> (fun x -> pown x 2)

上面,我把它命名为
x

如果参数不匹配,我通常不使用管道,因为我觉得它会损害可读性。Brian的选项非常清楚,但它与将结果赋给值(使用
let
而不是使用管道和
fun
)没有太大区别

所以,我只写这个(没有任何好的函数魔法):

这与Brian的版本基本相同——您也将结果赋值——但更简单。我可能会使用更具描述性的名称,例如
sumResult
,而不是
x


使用
flip
的版本在Haskell中是非常标准的,尽管我也认为它可能会变得难以阅读(不是在这个简单的情况下,但是如果您将多个函数组合在一起,它很容易变得可怕)。这也是为什么F#库中缺少
flip
(和其他)的原因。

如果参数不匹配,我通常不使用管道,因为我觉得它会损害可读性。Brian的选项非常清楚,但它与将结果赋给值(使用
let
而不是使用管道和
fun
)没有太大区别

所以,我只写这个(没有任何好的函数魔法):

这与Brian的版本基本相同——您也将结果赋值——但更简单。我可能会使用更具描述性的名称,例如
sumResult
,而不是
x


使用
flip
的版本在Haskell中是非常标准的,尽管我也认为它可能会变得难以阅读(不是在这个简单的情况下,但是如果您将多个函数组合在一起,它很容易变得可怕)。我认为这也是为什么F#库中缺少
flip
(和其他)的原因。

所以我不能用像$,@之类的名字来处理这个变量?这很奇怪。如果“奇怪”的意思是“不像疯狂的perl”,那么是的,这很奇怪所以我不能用像$,@之类的名字来称呼这个变量?这很奇怪。如果“奇怪”的意思是“不像疯狂的perl”,那么是的,这很奇怪