2016-11-07 14 views
4

ほとんどのプログラミング言語の操作の順番で、 "ブール値ではない"の優先順位が==より高い理由を知っている人はいますか?操作の順序(== vs not)

数学的論理/モデル理論では、それ以外の方法はありませんか?それが原因で私には奇妙なようでないと==間の操作の順序、の「こんにちは」に印刷されなかった

if not 1 == 2 then 
    print("hi") 
end 

:私は最近、Luaの中で次のように書きました。

+0

すべての単項接頭演算子が同じ(高い)優先順位を持つ場合、解析が容易になるでしょう。 – melpomene

+1

メモ - あなたが混乱するかもしれない場合に備えて、Luaには(演算子が)(https://www.lua.org/manual/5.3/manual.html#3.4.5)(単項またはバイナリ)ブール値_と_だけがブール値を返します。 'not'は任意の型の値をとりますが、ブール値だけを返します。 –

答えて

1

not 1 == 2not (1 == 2)を区別する必要があります。後者はあなたが期待するように動作します。前者は1にのみ適用された単一notであり、おそらくゼロが生成されます。

これは「数学的/モデル理論」と変わらない。

+0

数学的論理では、 "1 == 2"は原子文と見なされ、 "not"は論理結合である。まず、すべての原子文の真理値が評価され、ブーリアン・コネクティブが適用されます。 [https://en.wikipedia.org/wiki/T-schema#The_inductive_definition](https://en.wikipedia.org/wiki/T-schema#The_inductive_definition)。それは、数学的論理とは違うと私が思いついたときに思いついたことです。 – Mike

+0

私は5年間、数学的論理を研究しましたが、私は同意しません。 – EJP

+2

Luaでは、 'not 1'は' false'と評価されます。これは '2'とは異なり、出力はありません。 – lhf

5

各演算子には反対の演算子があるため、関係演算子を否定する必要はありません。たとえば、等号演算子と不等号演算子の両方があります(例は1 ~= 2と書かれている可能性があります)。 ほとんどのが自然言語に近いようなコードになるため、ほとんどのプログラミング言語の単項演算子が最も高い優先度を持ちます。

たとえば、not green and not blueは「緑色でも青色でもない」ことを意味します。 notの優先度が非常に低いと、それはnot (green and not blue)のようなものになります。

0

プログラミングの==演算子は、数学ロジックで2つの意味を持ちます。 1つはドメイン=の要素間の等価です。第二は二重暗示です。これは、==とブール値を比較できるように、==と数値を比較できるためです。数学的なロジックで

=はドメインのみの値を比較することができ、とてもabがない間a = bは、常にブール式です。しかし、a ↔ bを見ると、a ↔ b,aおよびbはブール式です。したがって、not a ↔ bは、(not a) ↔ bを意味し、not a = bは、not (a = b)を意味する。

=は、ほとんどのプログラミング言語でも同じオペレータ==で表現されているので、しかし、違った使われたとき==ごとに異なる精度のルールを実装するために、少なくとも直感的で非常に難しく、おそらくではありません。

実装が難しい理由は、一般に、演算子の優先順位がパーサーで実装されているためです。パーサーがソースコードを構文木に変換すると、演算子の優先順位は既にツリーにエンコードされています。型チェック(存在する場合)は、構文ツリーで動作します。したがって、パーサーは型情報へのアクセス権を持たないため、異なる優先順位規則を適用するために型情報を使用できないことを意味します。

関連する問題