概要
前置記法は、一般にポーランド記法とも呼ばれ、数学式や論理式を表す方法の一つで、各演算子をその被演算子の前に置きます。通常の中置記法(a + b)とは対照的に、前置記法ではまず演算子を書き、その後に引数を書きます。そのため、多くの括弧やグループ化記号を省くことができます。一般的な導入については数式表記を、書かれた方程式の例については方程式を参照してください。
特徴
各演算子のアリティ(被演算子の数)が分かっていれば、前置記法は曖昧さがありません。そのため、読み手やパーサーは左から右へ走査するだけで式の構造を復元できます。代表的な特徴は次のとおりです。
- 演算子が被演算子の前に来ます。x と y に適用される n 項関数 f は、f x y と書きます。
- 演算子の引数がすべて明示されていれば、括弧は不要です。順序とまとまりは演算子のアリティによって決まります。
- スタックや再帰下降に基づく、単純な構文解析アルゴリズムに適しています。
- 論理結合子や高階演算子にも一般化できます。関連する文脈については論式を参照してください。
歴史
ポーランド記法は、命題論理の表記を簡潔にするため、20世紀初頭に論理学者ヤン・ウカシェヴィチによって導入されました。ウカシェヴィチの仕事はおよそ1920年ごろにさかのぼり、彼の目的は括弧を取り除き、論理式をより分析しやすく、形式化しやすくすることでした。創始者とその業績についての詳細はヤン・ウカシェヴィチを、歴史的な注記については1920年前後の時期を参照してください。
用途と例
前置記法は、いくつかの実用的な場面で見られます。プログラム可能な電卓やユーザーインターフェースの一部で用いられ、初期のコンピュータ言語やインタプリタにも影響を与えました。たとえば、特定のCASIO電卓や類似機器では、式を前置形式で入力できます(CASIO)。関数型プログラミング言語やラムダ計算の影響を受けた言語では前置形式が広く使われており、Lisp系はその代表例です(Lispと関連言語)。
簡単な例
一般的な算術例を見ると、前置形式がどのように括弧を不要にするかが分かります。前置形式では次のように書きます。
- + 1 2 は 1 + 2 に対応します。
- * + 1 2 3 は (1 + 2) * 3 に対応します。これは、+ が次の2つの被演算子を取り、その結果として 3 が乗算に回るためです。
- 入れ子の例として、- * 4 + 2 3 5 は ((4 * (2 + 3)) - 5) として解析されます。
前置式を評価するときは、通常、左から右へ読み進め、各演算子のアリティに応じて後続の被演算子へ適用しながら構文木を構築します。あるいは、必要に応じて順序を反転するスタック आधारितのアルゴリズムを用いることもあります。
注目すべき違いと事実
前置記法は、後置記法、すなわち逆ポーランド記法(RPN)と密接に関係しています。どちらも多くの括弧を取り除きますが、演算子を被演算子の反対側に置きます。両形式に共通する重要な実用上の条件は、各演算子のアリティを把握していることです。それが分からないと、式が曖昧になることがあります。前置記法は、理論論理、コンパイラ設計、そして曖昧さのない括弧不要の表現が有利な式評価器の実装において、今でも重要です。
入門資料やドキュメントでは、さらに詳しい解説や実装が扱われています。実用上の使い方については、表記法の概要、方程式の例、そしてLispのような言語資料や電卓のマニュアルのような提供元ページを参照してください。