"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"。)
如果我说一个操作是左结合的,是否等同于说它 "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"。)