帮助我理解lambda表达式的优先级

时间:2011-02-01 05:11:28

标签: f# operator-precedence

查看Operator Precedence表,我对lambda表达式适合所有这些的地方感到困惑。对表1到25(从最低到最高的优先级)进行编号,我看到用于组合lambda表达式的两个关键标记:fun是非关联的6,->是右关联的8.这是,fun ... -> ...。这可能是我理解中的第一个错误,因为我甚至不确定优先级是否在lambda表达式的主体中起作用(->的右侧)我只能想到优先级在...中的作用整个表达,所以我会继续前进。根据此表,序列运算符;的优先级低于fun“运算符”4。我相信这说的是

fun (x:int) -> x + 3 ; 2;;

应该相当于

((fun (x:int) -> (x + 3)) ; 2);;

但它实际上相当于

(fun (x:int) -> (x + 3 ; 2));;

我感谢任何帮助澄清我对引用表给出的优先规则的解释与lambda表达式的实际优先规则!谢谢!

1 个答案:

答案 0 :(得分:4)

MU

(如果您正在读取运算符优先级表,那么您已经丢失了。表可能有错误,但是谁在乎,不要读表。并且不要使用序列运算符(;如果你使用lambda旁边的序列运算符,那么将lambda放在括号中。或者只是将每个lambda放在括号中。我一直触摸F#解析器的代码,我不知道相对的是什么;fun->的优先级是,我甚至不知道->具有优先权的含义(在表达式中为not an operator (只有在类型中,它确实是右关联的)...我无法想象这个问题或任何后续的任何令人满意的答案。除非你为F#编写自己的解析器/编译器,否则你应该对此没有任何兴趣。这些不是你要找的机器人。)