2009-12-15 163 views
1

是否在下列所有語言中標準化以產生值3?減法 - 評估順序

Print(6 - 2 - 1) 

換句話說,是否有任何語言在「6 - 2」之前評估「2 - 1」?

我想作出這個假設,以便我可以本能地插入圓括號((6 - 2) - 1)。它讓我處於LISP噩夢的危險之中。

感謝

回答

4

通常,當多個操作具有相同的優先級時,它們從左向右評估,類似於算術。我不想說所有語言,因爲我沒有對所有語言進行調查,但它應該是這樣的。我仍然會仔細閱讀文檔,瞭解我要嘗試的任何新語言。

+0

這對某些操作是正確的,但對其他操作不適用。例如。類似C語言的賦值運算符從右到左進行評估:「x = y = 3」被解析爲「x =(y = 3)」,而不是「(x = y)= 3」。如果語言中有一個指數運算符,它通常也是正確的。 – 2009-12-18 16:02:56

1

你想要的是左到右聯(而不是從右到左結合)是什麼。

這並不是保證,但大多數語言是從算術到從左到右的聯想。

1

據我所知,減法總是做成左結合的(出於顯而易見的原因 - 它按照你的期望)。有些語言可能會被明確地設計爲不適用,但這是一個安全的假設,算術幾乎總是按照您期望的方式工作。

2

我知道的每種語言都會按照預期的順序從左到右進行評估。不過,我建議你只要用你正在工作的任何語言進行快速測試來驗證這一點。

5

在Smalltalk中,沒有數學優先級。

數學運算符只是方法mames因此優先級被視爲任何其他方法名稱。您的示例將按預期進行評估,但例如,1 + 2 * 3產生9而不是7

3

只是爲了提到一個反例,如果記憶服務APL是嚴格正確聯合的,所以6-2-1會評估爲5.我期望有人安裝了APL或其一名後代將把如果我錯了,我們是對的。

Regards

+0

我不能相信我在一年前的答案上發表評論,但你說得對,它會在APL方言中評估爲5(用J驗證)。 – 2010-12-15 19:37:14

1

不要擔心和信任運營商的優先權。很少有語言的優先級與標準的數學運算符不同。使用圓括號的地方是不明顯的優先規則是什麼。對於標準的數學運算符,很明顯。

我知道的唯一的語言家族有優先權,但不符合標準的數學規則是APL家族,特別是K語言。這個家庭擁有大量的數學和發明操作員,並嚴格從右到左進行評估。但除非你必須處理這些類型的語言,否則不要擔心。