J. Barkley Rosserの "Logic for Mathematicians"では、かっこが多すぎないように表記法を使用しています。論理記者がこの記法を使うのはいつかわかりませんが、1957年に最初に出版された本は知っていますが、1916年に出版されたJ. G. P. Nicod's paperもこの記法を使用しています。だから明らかに長い歴史を持っていますが、現代の論理学者はこれが好まれていません。パースチャレンジ:オールドロジックのドット表記
プログラミングの世界では、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)
私はこの表記法のすべての詳細を説明望めない、それはロッサーの本の中で、ほぼ5ページがかかります。しかし、genaral(およびshort)では、オペレータの前または後のドット.
は、両側を押し離すために "セパレータ"を表します。コロン:
はより強いセパレータであり、3つのドット.:
または:.
はさらに強くなりますが、::
より小さくなります。
私は上記の言語の文法をどうやって書くことができますか?また、この表記は廃止されましたが、私はプログラマの目には非常に明確に見えることがわかりました。だから、その賛否両論は何ですか?
ハスケルでは、(2 *)$ 3 + 4'と言うことができますが、実際には関数スライスの一部として括弧を導入しています。 –
@larsmans私が知っているのは、私が「ドットほど強力ではない」と言ったことです。 –