gpt4 book ai didi

f# - 除了 <| 之外,还有什么 * 其他 * 类似于 F# 中 Haskell 的 $ 的?

转载 作者:行者123 更新时间:2023-12-04 07:34:52 25 4
gpt4 key购买 nike

我知道有后管(<|)运算符,在其他几个 SO 答案中引用。但是当与前向管道结合使用时效果不佳(|>) ,这在链接中很常见。但是我正在寻找相关选项。基本上是否有以下函数定义的任何内置版本?或者这是一种不良/危险的做法?

let inline (^%) f = f

let stuff =
[1;2;3]
|> Seq.filter ^% (>) 2
|> Seq.map ^% fun x -> x.ToString()


// compare to this, which doesn't compile (and would be hard to follow even if it did)
let stuff =
[1;2;3]
|> Seq.filter <| (>) 2
|> Seq.map <| fun x -> x.ToString()

最佳答案

有一些 Haskell 功能,例如使用反引号和节的可选中缀,这些功能在 F# 中不可用。这使得某些构造更加冗长。

通常,我会像上面这样简单地编写一个函数管道:

let stuff = 
[1;2;3]
|> Seq.filter (fun x -> x < 2)
|> Seq.map string

在我看来,这更具可读性。例如,使用 Seq.filter ^% (>) 2 ,我直觉地将其理解为“所有大于 2 的值”,但这不是它的作用:
> let inline (^%) f = f;;

val inline ( ^% ) : f:'a -> 'a

> let stuff =
[1;2;3]
|> Seq.filter ^% (>) 2
|> Seq.map ^% fun x -> x.ToString()
|> Seq.toList;;

val stuff : string list = ["1"]

如果你让代码的读者怀疑代码的作用,你只会降低每个人的生产力。使用 Seq.filter (fun x -> x < 2)可能看起来更冗长,但对读者来说是明确的。

关于f# - 除了 <| 之外,还有什么 * 其他 * 类似于 F# 中 Haskell 的 $ 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36220283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com