如果我说一个操作是左结合的,是否等同于说它“从左到右关联”和“从右到左关联”?
我的疑惑来自于我在函数式编程Haskell教材中看到的一个例子。它声明:
函数应用从左到右关联。例如,mult x y z表示((mult x)y)z。即mult接收一个整数x,返回一个函数mult x,该函数接收一个整数y,并返回一个函数mult x y,该函数接收一个整数z并返回x*y*z的结果。
但是,如果我说它是“从左到右关联”,我会认为它是右结合的,即评估从右侧开始,向左侧进行。然而,由于mult的评估是从左侧开始,并且向右侧进行,所以这是左结合的吗?作者是否应该说函数应用程序“从右到左关联”?还是我漏掉了什么,作者是正确的?
我的疑惑来自于我在函数式编程Haskell教材中看到的一个例子。它声明:
函数应用从左到右关联。例如,mult x y z表示((mult x)y)z。即mult接收一个整数x,返回一个函数mult x,该函数接收一个整数y,并返回一个函数mult x y,该函数接收一个整数z并返回x*y*z的结果。
但是,如果我说它是“从左到右关联”,我会认为它是右结合的,即评估从右侧开始,向左侧进行。然而,由于mult的评估是从左侧开始,并且向右侧进行,所以这是左结合的吗?作者是否应该说函数应用程序“从右到左关联”?还是我漏掉了什么,作者是正确的?
a @ b @ c
应该被读作(a @ b) @ c
或者a @ (b @ c)
。然而,“结合”不仅仅是语法问题:它意味着(a @ b) @ c = a @ (b @ c)
,这确实是@
所代表的任何东西的属性。也许我们可以说,具有结合性意味着同时具有左结合性和右结合性,但那会很令人困惑,并混淆在不同层次上工作的概念。 - duplode