左结合编程语言的例子?

Example of programming language that is left associative?

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

我最终找到了描述它的正确词语 (right associative),这让我开始思考。

有没有左结合的编程语言?我从未见过一种语言:

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

我不这么认为。尽管您总是可以重载赋值运算符并在您的 C++ 中造成完全混乱。

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

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

如果我们谈论 Operator associativity,我们实际上应该考虑两种类型的 associativityside_associative(例如 =)或 non-associative(例如 == ) 因为对于机器来说,如果它是从左到右或从右到左的线,它没有任何区别。

没有这样的编程语言最初是 left associative,但其中一些允许通过运算符重载,而一些(例如 R)将同时允许:-><-.

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

你误解了结合律。如果 (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 根本不关联并且完全是非法的。

None与a = bb = a的区别有什么关系。由于这只涉及 = 运算符的一次使用,因此关联性根本不会考虑在内。相反,相关的 属性 是 commutativity:如果 a op b 等价于 b op a,则运算符 op 是可交换的。我不知道任何语言的赋值是可交换的,我也不知道它是怎么回事。

不存在左交换性或右交换性等概念。据我所知,问题 "Does a = b assign b to a or vice-versa?" 没有术语 - 这只是赋值运算符语义的一部分。