gpt4 book ai didi

f# - 关联性、优先级和 F# Pipe-forward

转载 作者:行者123 更新时间:2023-12-01 06:47:50 25 4
gpt4 key购买 nike

F# pipe-forward 可以表示为:

let (|>) x f = f x

例如:

let SimpleFunction (a : typeA) (b : typeB) (c : typeC)=
printf "OK."

// No problem here.
SimpleFunction a b c

// Using pipe-forward
c |> SimpleFunction a b
// No problem here. Interpreted as the same as above.

但是,根据文档,管道转发运算符是左关联的。

https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/symbol-and-operator-reference/

所以,我期待管道转发声明:

// Original Expression
c |> SimpleFunction a b

// to be equivalent to:
(c |> SimpleFunction) a b

// Which is equivalent to:
SimpleFunction c a b
// Error!! SimpleFunction takes typeA, then typeB, then typeC.

为什么编译器不将管道转发表达式“解释”为错误表达式?我对运算符优先级/关联性有任何困惑吗?


其他来源:

http://theburningmonk.com/2011/09/fsharp-pipe-forward-and-pipe-backward/

What is associativity of operators and why is it important?

https://en.wikipedia.org/wiki/Operator_associativity

最佳答案

二元运算符的关联性仅在您有两个或多个相同运算符出现时才重要。当您有不同的运算符(此处:|> 和并列)时,重要的是它们的相对优先级。

并列的优先级高于|>,因此

c |> SimpleFunction a b

被解析为

(c) |> (SimpleFunction a b)

所以,根据|>的定义,它等价于

(SimpleFunction a b) (c)

通常会这样写

SimpleFunction a b c

最后一个等价是由于并列是左结合的。

|> 是左结合的事实意味着像

这样的表达式
x |> f |> g

被解析为

(x |> f) |> g

相当于

g (f x)

|> 链表示函数组合——连续的管道步骤——而不是向函数传递更多参数。

关于f# - 关联性、优先级和 F# Pipe-forward,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47259491/

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