我正在教一个关于编程的朋友,我很难说服他们,a = b
和b = a
是两个完全不同的东西。左结合的编程语言的示例?
我终于找到了正确的词来形容它(right associative),让我思考。
是否有任何编程语言是关联的?我从来没有见过语言:
a = b
结果b被设置为a的值。
我正在教一个关于编程的朋友,我很难说服他们,a = b
和b = a
是两个完全不同的东西。左结合的编程语言的示例?
我终于找到了正确的词来形容它(right associative),让我思考。
是否有任何编程语言是关联的?我从来没有见过语言:
a = b
结果b被设置为a的值。
如果我们谈论Operator associativity
我们实际上应该考虑两种类型的associativity
:side_associative
(如=
)或non-associative
(如==
),因为它不会使机器的任何区别,如果它得到的线左向右或从右向左。
有没有这样的编程语言本来left associative
,但他们中的一些允许它通过运算符重载和一些(例如R
)将允许:->
和<-
。
我相信在欧洲没有人会喜欢它,但它可能在中东地区很可爱。我可以想象,有IDE
s左侧切换右侧,但最终编译器是用欧洲方式编写的。
“非关联”绝对不意味着无论从右侧还是从左侧读取都无关紧要。根据上下文,它可能意味着操作符没有关联属性(即'(a op b)op c'不等于'a op(b op c)')(正如使用[here](https: //en.wikipedia.org/wiki/Associative_property#Non-associativity)),或者它既不是左也可以是右关联的(也就是说,操作符的多个用法总是必须加上括号) - 正如所使用的[这里](https:/ /en.wikipedia.org/wiki/Operator_associativity#Non-associative_operators)。 – sepp2k
我不这么认为。虽然你总是可以重载赋值运算符,并导致你的C++完全混淆。
R既定义了<-
和->
赋值运算符。
> b <- 42
> b -> a
> a
[1] 42
您误解了关联性。如果(a op b) op c
等于a op (b op c)
,则运营商op
是关联的。对于不相关联的运营商而言,a op b op c
代表前者还是后者,因此变得相关。因此,我们区分左结合算子(a op b) op c
和右结合算子,它们是a op (b op c)
。
大多数语言中的大多数操作符都是左关联的。以-
为例:a - b - c
在多数语言中相当于(a - b) - c
,而不是a - (b - c)
。
赋值运算符是一个例外,因为(a = b) = c
通常是不合法的(因为您不能分配赋值结果)。因此在大多数语言中a = b = c
相当于a = (b = c)
。一个明显的例外是Python,其中a = b = c
根本不相关,仅仅是非法的。
这与a = b
和b = a
之间的差异没有任何关系。由于这只涉及一次使用运算符,因此关联性根本不包含在内。相关的财产是commutativity:如果a op b
等于b op a
,则运营商op
是可交换的。我不知道任何语言的任务是可交换的,我也不知道它是如何可能的。
像左交换或右交换的概念不存在。据我所知,对于“a = b
指定b
指定为a
或反之亦然”这个问题,没有任何术语? - 这只是赋值运算符的语义的一部分。
我想你的问题是误导。你问关于分配关联性,但是把你的问题作为语言结合性来推销,不管这意味着什么(我相信它没有任何意义。) –
@LittleAlien你会如何澄清这个问题?从我所看到的每种语言中的所有操作符都被设置为正确的关联。我认为可能有一种语言被写成是左联想的。 –
不难发现存在不正确的关联操作。即使在您发布的链接下,我们也会阅读关于非关联运算符的内容,并查看具有关联性的C语言op优先级表的链接。您会在那里找到左右关联运算符。您在Google中找不到任何“正确的关联语言”。您刚[选择了一位运营商并将其关联性扩展到所有运营商](http://www.youtube.com/watch?v=s7MTM4BKZ_E)。因为没有RA语言,所以我觉得你会问LA关于分配的操作符。 –