6

次の 2 つのファクトをプロローグ インタープリターにロードしました。

foo(U+V,1).
foo(U*V,2).

次に、その結​​果で次のクエリを試します。

foo(x*x+x,R).  -->  R = 1
foo(x+x*x,R).  -->  R = 1
foo(x*x*x,R).  -->  R = 2

次に、次のクエリを試します。

foo(x*x-x,R).  -->  no

私が理解しているように、これは演算子の優先順位がツリー式を構築する方法によって説明されます。

x+x*x  -->  +           so it matches with  -->  +
           / \                                  / \
          x   *                                U   V
             / \
            x   x

x-x*x  -->  -           DOES NOT matches any fact.
           / \                             
          x   *                                
             / \
            x   x

この説明は正しいですか?

4

1 に答える 1

4

はい、これは正しいです。

デフォルトの演算子の優先順位は自然に定義されています。つまり、通常の数学的な優先順位を使用します。しかし、それが気に入らない場合は、再定義できます。

優先順位を変更することが良いアイデアかどうかは別の問題ですが、Prolog の構文が効果的に変更され、解析の問題が発生する可能性があります。特に、Prolog 構文の演算子の優先順位を 1000 より上に変更した場合。

于 2009-04-20T11:14:33.717 に答える