我非常精通在F#中使用>>和<<运算符.然而,在查看F#源以建立更深入的理解之后,我对此感到困惑:
let inline (>>) f g x = g(f x)
let inline (<<) f g x = f(g x)
Run Code Online (Sandbox Code Playgroud)
我如何从概念上解释这些表达?另外,你会如何形容这些表达?他们定义了一种类型吗?
在Microsoft的F#示例中,他们使用">>"运算符,如下所示:
test |> Seq.iter (any_to_string >> printfn "line %s");
Run Code Online (Sandbox Code Playgroud)
">>"运算符在这种情况下做了什么?序列中的每个项(在这种情况下是一个数组)是否any_to_string隐式传递?这类似(fun item -> printfn "line %A" item)吗?
例如,我在F#中有一个谓词
let myFunc x y = x < y
Run Code Online (Sandbox Code Playgroud)
有没有办法创建此功能的否定版本?
所以在功能上类似的东西
let otherFunc x y = x >= y
Run Code Online (Sandbox Code Playgroud)
但是通过使用原始的myFunc?
let otherFunc = !myFunc // not valid
Run Code Online (Sandbox Code Playgroud)