波蘭表示法

波蘭表示法

盧卡西威茨(Lukasiewicz,波蘭,1878—1956)於20世紀20年代首先使用的一種不需用括弧表示一個式子的方法。可用來寫出算術表達式、代數表達式和邏輯表達式,其中所有運算符號位於進行這些運算的數據(或變數)之後。在求表達式的值時,它能給出需要求出的全部中間結果,而且在求複雜表達式的值時,特別方便。例如,可以把表達式(X-y)×(A+B)寫成無括弧的形式:XY-AB+X,它的意義是X與Y相減,A與B相加,然後將前者的“差”與後者的“和”相乘

基本介紹

  • 中文名:波蘭表示法
  • 外文名:Polish notation
定義來源,算術形式,計算機編程,運算順序,

定義來源

波蘭表示法(Polish notation,或波蘭記法),是一種邏輯、算術和代數表示方法,其特點是操作符置於運算元的前面,因此也稱做前綴表示法。如果操作符的元數(arity)是固定的,則語法上不需要括弧仍然能被無歧義地解析。波蘭記法是波蘭數學家揚·武卡謝維奇1920年代引入的,用於簡化命題邏輯。
揚·武卡謝維奇本人提到:
我在1924年突然有了一個無需括弧的表達方法,我在文章第一次使用了這種表示法。
—— Łukasiewicz(1), p. 610, footnote.
阿隆佐·邱奇在他的經典著作《數理邏輯》中提出該表達方法是一種值得被關注的記法系統,甚至將它與阿弗烈·諾夫·懷海德和伯特蘭·羅素在《數學原理》中的邏輯表達式相提並論。波蘭表示法雖然在邏輯領域沒有被廣泛使用,但仍在計算機科學領域占有一席之地。

算術形式

表達“三加四”時,前綴記法寫作“+ 3 4”,而不是“3 + 4”。在複雜的表達式中,操作符仍然在運算元的前面,但運算元可能是包含操作符的平凡表達式。例如,如下的中綴表達式:
(5 − 6) * 7寫作前綴表示法時是:
*(− 5 6) 7或省略括弧:
* − 5 6 7由於簡單的算術運算符都是二元的,該前綴表達式無需括弧,且表述是無歧義的。在前面的例子裡,中綴形式的括弧是必需的,如果將括弧移動到:
5 − (6 * 7)即:
5 − 6 * 7則會改變整個表達式的值。而其正確的前綴形式是:
− 5 * 6 7減法運算要等它的兩個運算元(5;6和7的乘積)都完成時才會處理。在任何表示法中,最裡面的表達式最先運算,而在波蘭表達式中,決定“最裡面”的是順序而不是括弧。
簡單算術的前綴表達式主要是用於學術研究方面。與逆波蘭表示法不同,前綴表達式基本沒有在商業計算器中使用過,但是其體系經常在編譯器構造的概念教學中首先使用。

計算機編程

LISP的S-表達式中廣泛地使用了前綴記法,S-表達式中使用了括弧是因為它的算術操作符有可變的元數(arity)。逆波蘭表示法在許多基於堆疊的程式語言(如PostScript)中使用,以及是一些計算器(特別是惠普)的運算原理。
假定只有二元運算時,運算元的個數必然為操作符的個數加一,否則表達式就無意義。這樣在計算更複雜,更長的表達式時,可以簡單地忽略某些錯誤表達式,因此在使用前綴記法時必須小心仔細檢查其表達意義。

運算順序

前綴表達式的運算順序很容易檢測。需注意的是,當運算時,操作符是作用在第一個運算元上,特別是需注意不滿足交換律的運算,如除法、減法。
基於堆疊的操作符由於其本身的特性,無需括弧也很容易區分運算的順序,因此大量使用波蘭記法。運算波蘭表達式時,無需記住運算的層次,只需要直接尋找第一個運算的操作符。以二元運算為例,從左至右讀入表達式,遇到一個操作符後跟隨兩個運算元時,則計算之,然後將結果作為運算元替換這個操作符和兩個運算元;重複此步驟,直至所有操作符處理完畢。因為在正確的前綴表達式中,運算元必然比操作符多一個,所以必然能找到一個操作符符合運算條件;而替換時,兩個運算元和一個操作符替換為一個運算元,所以減少了各一個操作符和運算元,仍然可以疊代運算直至計算整個式子。多元運算也類似,遇到足夠的運算元即產生運算,疊代直至完成。疊代結束的條件由表達式的正確性來保證。

相關詞條

熱門詞條

聯絡我們