J. Barkley Rosser の " Logic for Mathematicians " で、彼は記法を使用して括弧が多すぎるのを避けています。論理学者がいつこの表記法を使い始めたのかはわかりませんが、1957 年に最初に出版されたその本と、1916 年に出版されたJGP Nicod の論文もこの表記法を使用していることを知っています。明らかに、これにはかなり長い歴史がありますが、今日では現代の論理学者には好まれていません。
プログラミングの世界では、LISP と同様のプログラミング言語で、プログラマーが適切な (膨大な!) 括弧の数を追跡するという大きな課題があります。Haskell は$
、機能の一部を提供する演算子を提供しますが2 * $ 3 + 4
、ドットほど強力ではないとは言えません (以下の例を参照)。C 言語のシリアルは、従来の操作の優先順位を使用しますが、場合によっては、ネストされた括弧が依然として必要です。では、なぜ実際の言語がこの戦略を使用していないのだろうか? 試してみましたが、文法を書くことさえできないことがわかりました!
+
演算子とが 2 つしかなく*
、すべての項が整数であるおもちゃの電卓言語の例をいくつか示しましょう。
この表記法を使用すると、翻訳者は次のテスト ケースに合格する必要があります。
1 + 3 .* 2
= (1 + 3) * 2
1 *. 3 + 2
= 1 * (3 + 2)
1 *. 2 +. 2
= (1 * 2) + 2
2 *: 2 + 3 .* 4
= 2 * ((2 + 3) * 4)
この表記法の詳細をすべて説明することはできません。Rosser の本では 5 ページ近くかかります。しかし、一般的に (そして短く)、.
演算子の前後のドットは「セパレーター」を表し、両側を押しのけます。コロン:
はより強力な区切り記号であり、3 つのドット.:
または:.
さらに強力ですが、よりも小さい::
などです。
上記の言語の文法をどのように書き、それを解析できるのだろうか? また、この表記法は廃止されましたが、プログラマの目には非常に明確に見えることがわかりました。それで、その長所と短所は何ですか?