2016-08-02 63 views
0

我正在教一个关于编程的朋友,我很难说服他们,a = bb = a是两个完全不同的东西。左结合的编程语言的示例?

我终于找到了正确的词来形容它(right associative),让我思考。

是否有任何编程语言是关联的?我从来没有见过语言:

a = b结果b被设置为a的值。

+2

我想你的问题是误导。你问关于分配关联性,但是把你的问题作为语言结合性来推销,不管这意味着什么(我相信它没有任何意义。) –

+0

@LittleAlien你会如何澄清这个问题?从我所看到的每种语言中的所有操作符都被设置为正确的关联。我认为可能有一种语言被写成是左联想的。 –

+1

不难发现存在不正确的关联操作。即使在您发布的链接下,我们也会阅读关于非关联运算符的内容,并查看具有关联性的C语言op优先级表的链接。您会在那里找到左右关联运算符。您在Google中找不到任何“正确的关联语言”。您刚[选择了一位运营商并将其关联性扩展到所有运营商](http://www.youtube.com/watch?v=s7MTM4BKZ_E)。因为没有RA语言,所以我觉得你会问LA关于分配的操作符。 –

回答

0

如果我们谈论Operator associativity我们实际上应该考虑两种类型的associativityside_associative(如=)或non-associative(如==),因为它不会使机器的任何区别,如果它得到的线左向右或从右向左。

有没有这样的编程语言本来left associative,但他们中的一些允许它通过运算符重载和一些(例如R)将允许:-><-

我相信在欧洲没有人会喜欢它,但它可能在中东地区很可爱。我可以想象,有IDE s左侧切换右侧,但最终编译器是用欧洲方式编写的。

+0

“非关联”绝对不意味着无论从右侧还是从左侧读取都无关紧要。根据上下文,它可能意味着操作符没有关联属性(即'(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

2

我不这么认为。虽然你总是可以重载赋值运算符,并导致你的C++完全混淆。

1

R既定义了<-->赋值运算符。

> b <- 42 
> b -> a 
> a 
[1] 42 
4

您误解了关联性。如果(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 = bb = a之间的差异没有任何关系。由于这只涉及一次使用运算符,因此关联性根本不包含在内。相关的财产是commutativity:如果a op b等于b op a,则运营商op是可交换的。我不知道任何语言的任务是可交换的,我也不知道它是如何可能的。

像左交换或右交换的概念不存在。据我所知,对于“a = b指定b指定为a或反之亦然”这个问题,没有任何术语? - 这只是赋值运算符的语义的一部分。