2016-08-02 34 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或反之亦然」這個問題,沒有任何術語? - 這只是賦值運算符的語義的一部分。