"associates to the right" 相当于左结合还是右结合?

Is "associates to the right" equivalent to being left or right associative?

如果我说一个操作是左结合的,是否等同于说它 "associates from the left" 和 "associates to the right"?

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

函数应用关联到左侧。例如mult x y z 表示 ((mult x)y)z。即mult接受一个整数x,returns一个函数mult x,它接受一个整数y,returns一个函数mult x y,它采用整数 z 和 returns x*y*z.

的结果

但如果我说 "associates to the left",我认为它是右关联的,即求值从右到左开始。但是,由于 mult 的计算从 左边开始,从 右边,这是左关联的吗?作者应该说功能应用"associates to the right"?还是我遗漏了什么而作者是正确的?

你只需要停止考虑评估顺序。

括号实际上是表达结构,即 当我们说 mult x y 时,我们指的是这些,而不是我们以后可能决定如何评估它。

      $           $
     / \         / \
    $   y     mult  $
   / \             / \
mult  x           x   y

是的,我们在学校被教导括号是关于你做的顺序 里面的东西。那是因为我们是在算术的背景下学的 运营商。由于这些都是严格的,因此决定的自由度较低 如何评估给定的表达式,括号主要决定 订单。另外,我们可能从来没有想过很多关于表达式的问题 抽象事物不同于它们被写下来的方式。

在 Haskell 的更一般的上下文中,我们不能将解析和 评估。当我们说 "associates left" 或 "to the left" 我们只是在谈论它是如何解析的。它告诉你 x 属于左侧带有 mult 而不是带有的子表达式 右边的 y

(我还没有看到任何人使用短语 "associates from" 而且它没有 真的很有道理,除非你把它读成 "associates away from"。)