"向右联系"是否等同于左右联合?

Hum*_*pty 3 haskell functional-programming associative

如果我说一个操作是左关联的,那相当于说它"从左边关联"和"从右边关联"?

我的困惑来自于我的函数式编程Haskell教科书中的一个例子.它指出:

功能应用程序关联到左侧.如mult x y z指((mult x)y)z.即mult取整数x,返回一个mult x取整数y的函数mult x y,并返回一个函数,该函数取整数z并返回结果x*y*z.

但如果我说它"与左边相关",我认为它是正确联想的,即评估从右边和左边开始.然而,由于评估mult开始由左,以正确的,这是左结合?作者是否应该说功能应用"与权利相关"?或者我错过了什么,作者是正确的?

Dav*_*her 11

您只需要停止考虑评估顺序.

包围实际上是关于表达结构,也就是说,当我们说的时候mult x y,我们指的是哪一个,而不是我们后来如何决定评估它.

      $           $
     / \         / \
    $   y     mult  $
   / \             / \
mult  x           x   y
Run Code Online (Sandbox Code Playgroud)

是的,我们在学校被教导括号是关于你做事的顺序.那是因为我们在算术运算符的背景下学习它.由于这些都是严格的,因此决定如何评估给定表达式的自由度较低,并且包围主要决定一个顺序.此外,我们可能从未想过将表达式视为与写下来的方式截然不同的抽象事物.

在Haskell的更一般的上下文中,我们无法将解析和评估混为一谈.当我们说"左边的人"或"左边的人"时,我们只谈论它是如何被解析的.它告诉你,它x 属于一个子表达式,mult左边是左边的,而y右边没有.

(我没有看到任何人使用"来自"的短语,除非你把它看成是"远离他人",否则它没有任何意义.)