如果我说某个操作是左关联的,那相当于说它是“从左边关联”和“从右边关联”吗?
我的困惑来自我的函数式编程Haskell教科书中的一个例子。 它声明:
功能应用程序关联到左侧。例如mult x y z
表示((mult x)y)z
。即mult
取整数x
,返回一个函数mult x
,取整数y
,并返回一个函数mult x y
,取整数z
1}}并返回x*y*z
的结果。
但如果我说它“与左边相关”,我认为它是正确联想的,即评估从右到左开始。但是,由于mult
的评估从左侧开始,开始右侧,这是左关联的吗?作者是否应该说功能应用“与权利相关”?或者我错过了什么,作者是对的?
答案 0 :(得分:11)
您只需要停止考虑评估顺序。
包围实际上是关于表达结构,即哪个
这些我们的意思是当我们说mult x y
时,而不是我们以后如何决定评估它。
$ $
/ \ / \
$ y mult $
/ \ / \
mult x x y
是的,我们在学校被教导括号是关于你做的命令 这是因为我们在算术的背景下学到了它 运营商。由于这些都是严格的,因此决定的自由度较低 如何评估给定的表达式并且包围主要决定 订单。另外,我们可能从未想过表达式 抽象的东西与写下来的方式截然不同。
在Haskell的更一般的上下文中,我们无法混淆解析和
评价。当我们说“离伙伴”或“向左”时
我们只谈论它是如何被解析的。它告诉你x
属于一个子表达式,左侧是mult
,而不是
右边的y
。
(我没有看到有人使用“来自”的短语,但事实并非如此 真的很有意义,除非你把它看成是“远离他人”。)