关于运算符结合性术语等价性的疑问:左结合与相关表述是否等同?
关于运算符结合性的疑问解答
咱们一个个来拆解你的疑问哈:
1. “associates to the right”等价于左结合还是右结合?
直接给结论:"associates to the right"就是右结合。
简单理解这个表述:当说一个运算符“associates to the right”,意思是遇到连续的同优先级运算时,我们会把最右边的操作先结合起来。举个常见的例子,很多语言里的幂运算符是右结合的,比如a ^ b ^ c会被解析成a ^ (b ^ c),而不是左结合的(a ^ b) ^ c。
2. 左结合是否等价于“associates from the left”和“associates to the right”?
当然不是,左结合只等价于**"associates from the left"**,和"associates to the right"是完全相反的概念。
你提到的Haskell函数应用的例子正好能说明这点:函数应用是左结合的,也就是mult x y z会被解析成((mult x) y) z——这就是"associates from the left"的表现:从左到右依次结合,先处理最左边的mult x,得到一个新函数后,再用这个函数去处理y,最后再用得到的函数处理z。
如果是"associates to the right"(右结合)的话,mult x y z就会被解析成mult x (y z),这在Haskell里显然不对,因为y如果是普通整数的话,根本不能接收参数z,会直接报错。
内容的提问来源于stack exchange,提问作者Data
相关产品推荐
相关产品推荐

