ポーランド記法

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Prefix-dia.png
ポーランド記法
中置記法
逆ポーランド記法

ポーランド記法(ポーランドきほう、Polish Notation)とは、数式やプログラムを記述する方法(記法)の一種。演算子(オペレータ)を被演算子(オペランド)の前(左)に記述することから、前置記法(ぜんちきほう、prefix notation)とも言う。

その他の記法として、演算子を被演算子の中間に記述する中置記法、後(右)に記述する後置記法(逆ポーランド記法)がある。

名称の由来は、ポーランド人の論理学者ヤン・ウカシェヴィチ (Jan Łukasiewicz) が考案したことによる。

概要[編集]

例えば、「1 と 2 を加算する」という演算を、一般的に数式の表記に用いられる中置記法で記述すると、以下のようになる。

1 + 2

一方、ポーランド記法では、加算を表す演算子 + を、被演算子である 1 と 2 の前(左)に置いて、以下のように記述する。

+ 1 2

ポーランド記法は、演算子と被演算子を分離して記述することで、式の解釈を明確にするために考えだされたものであり、二項演算であれば、括弧を使うことなく演算を一意に表記することができる。

例えば、中置記法による以下の式を考える。

(1 + 5) * (2 + 3)

これをポーランド記法で記述すると以下の通りとなり、括弧が不要である。

* + 1 5 + 2 3

一方、ポーランド記法では、被演算子同士を区切る記号(デリミタ)が必要である(中置記法では演算子がデリミタとして働くため不要)。一般には空白が用いられることが多く、上の例では1と5の間、2と3の間にある空白がそれに当たる。

なお、ポーランド記法においても、読みやすくするために括弧を用いることがあり、以下のように記述しても間違いではない。[1]

(* (+ 1 5) (+ 2 3))

コンピュータへの応用[編集]

ポーランド記法では、演算子があたかも関数適用のような形態をとる。これを直接利用したのがLISPで、LISPでは、たとえば +cons などと同じ、関数の名前に過ぎず、関数と全く同じに実引数リストの前に置く。これは、たとえばC++の、演算子(その多くが中置記法)のオーバーロードのために、operator+ というような特別な構文を使ったりしているのなどとは対照的である。

関連項目[編集]

脚注・参照[編集]

  1. ^ LISPはこのような見た目だが、LISPで括弧が必須なのはLISPの理由による。すなわち、LISPでは式を読み込む時に式の木構造を構築するのだが、括弧なしで式の木構造を構築するには、演算子を識別し、その引数の数がわかっていなければならない。しかし、読み込み時にはその文字列から演算子かどうかはわからないし、任意個の引数をとる演算子もある。このため括弧なしには木構造を構築できないので、LISPでは括弧が必須なのである。