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

时间:2018-04-04 09:50:07

标签: haskell functional-programming associative

如果我说某个操作是左关联的,那相当于说它是“从左边关联”和“从右边关联”吗?

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

功能应用程序关联到左侧。例如mult x y z表示((mult x)y)z。即mult取整数x,返回一个函数mult x,取整数y,并返回一个函数mult x y,取整数z 1}}并返回x*y*z的结果。

但如果我说它“与左边相关”,我认为它是正确联想的,即评估从右到左开始。但是,由于mult的评估从左侧开始开始右侧,这是左关联的吗?作者是否应该说功能应用“与权利相关”?或者我错过了什么,作者是对的?

1 个答案:

答案 0 :(得分:11)

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

包围实际上是关于表达结构,即哪个 这些我们的意思是当我们说mult x y时,而不是我们以后如何决定评估它。

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

是的,我们在学校被教导括号是关于你做的命令 这是因为我们在算术的背景下学到了它 运营商。由于这些都是严格的,因此决定的自由度较低 如何评估给定的表达式并且包围主要决定 订单。另外,我们可能从未想过表达式 抽象的东西与写下来的方式截然不同。

在Haskell的更一般的上下文中,我们无法混淆解析和 评价。当我们说“离伙伴”或“向左”时 我们只谈论它是如何被解析的。它告诉你x 属于一个子表达式,左侧是mult,而不是 右边的y

(我没有看到有人使用“来自”的短语,但事实并非如此 真的很有意义,除非你把它看成是“远离他人”。)