0

私はIvanBratkoの本「人工知能のためのプログラミング」について勉強しています。

今、私は演算子を研究しています、そして私はそれについていくつかの疑問を持っています、本で私は次のことを読むことができます:

したがって、演算子の優先順位によって、式の正しい解釈が決まります。たとえば、式a + b * cは、原則として、次のいずれかとして理解できます。

1.1。 +(a, *(b,c))

またはとして:

2.2。 *(+(a,b), c)

そして今、私は最初の疑問を抱いています:「これはどういう意味ですか?これらの2つの表現は異なる3つの異なる結果をもたらすので、私は非常に苦労しているようです!!!

たとえば、私が持っている場合:a=2、、b=3c=4

最初の結果は14で、2番目の結果は20であるため、違いがあります。しきい値が異なると、演算子の実行順序が異なり、結果が異なります。

したがって、(算術演算子の通常の優先順位を使用して:最初に乗算を実行し、合計の後に)正しい式は最初の式であり、2番目の式は間違っていると思います。

それが正しいか?

私も読むことができる本を読み続ける:

原則として、優先順位が最も高い演算子が用語の主要な関手です。+と*を含む式を通常の規則に従って理解する場合は、+の優先順位が*演算子よりも高くなります。

そして今、私は2番目の疑問を持っています:私が言ったように、算術の通常の慣習では、最初に乗算を実行し、合計の後に実行します。したがって、私の意見では、+ではなく優先順位を持つ*演算子です

私はそれについて何が欠けていますか?なぜ本の中でそれ+がより高い優先順位を持っていると言うの*ですか?

4

2 に答える 2

1

「用語の主な関手」とは、最後に実行される操作、または接頭辞表記の最も外側の操作を意味します。この定義はあなたの逆であり、したがって矛盾です。

于 2013-03-24T09:41:02.757 に答える
1

したがって、演算子の優先順位によって、式の正しい解釈が決まります。たとえば、この式a + b*cは、原則として、次のいずれかとして理解できます。

+(a, *(b,c))

またはとして:

*(+(a,b), c)

優先順位がない場合、これらは式を解釈する2つの可能な方法であると述べています(式を解析する方法が異なると、結果も異なります)。の前に実行する必要があるa + (b * c)ことがわかっている場合にのみ、グループ化することを知っています。(以下で指摘するように混乱するため、ここでは優先的に説明することは避けます)。*+

+*は単なる記号であり、いくつかの定義された優先順位を持つ演算子として使用されることがあります。一般的に、演算子として定義し、優先順位を付けることができます。

原則として、優先順位が最も高い演算子が用語の主要な関手です。+を含む式が*通常の規則に従って理解される場合+は、演算子よりも優先順位が高くなります*

英語での優先順位の定義は、「誰かまたは他の何かよりも重要であると見なされる条件。重要度、順序、またはランクの優先順位」です。何かが他の何かの前に起こらなければならない限り、私たちは優先権を持っています。

Cでは、演算子の優先順位は式のバインドの順序です。Cの優先順位の高い演算子は、優先順位の低い演算子の前に実行されます。

Prologでは、優先順位はファンクターを取得する順序です。これは、C演算子のバインドの順序の場合とは逆です。。を使用して式を分析すると、優先順位の高い演算子が早く=..表示されます。

于 2013-03-24T10:00:33.050 に答える