左关联的编程语言示例?

时间:2016-08-02 20:01:27

标签: operators programming-languages

我正在教一个关于编程的朋友,我很难说服他们a = bb = a是两个非常不同的东西。

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

是否存在任何左对联的编程语言?我从未见过以下语言:

a = b导致b被设置为a的值。

4 个答案:

答案 0 :(得分:4)

你误解了联想。如果op等同于(a op b) op c,则运算符a op (b op c)是关联的。对于不关联的运算符,因此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:如果op等同于a op b,则运算符b op a是可交换的。我不知道任何语言中的任务是可交换的,我也不知道它是如何形成的。

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

答案 1 :(得分:2)

我不相信。虽然你总是可以重载赋值运算符并导致c ++中的完全混淆。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果我们谈论Operator associativity,我们应该考虑两种类型associativityside_associative(例如=)或non-associative(例如==如果机器从左到右或从右到左得到线条,它就不会对机器产生任何影响。

最初left associative没有这样的编程语言,但有些编程语言通过运算符重载允许它,而有些(例如R)允许:->和{{1} }。

我相信在欧洲没有人会喜欢它,但在中东可能会觉得它很可爱。我可以想象有<- s在左侧切换到右侧,但最后编译器是以欧洲方式编写的。