0

私はコードを持っています

newplan(状態、[c(状態リスト)]、[]、状態):- 満足(状態、状態リスト)。

c() 述語が何をするのかわかりません。インターネットで答えを検索しようとしましたが、見つかりませんでした。私を助けてください。

4

1 に答える 1

0

このコードc/1では単なる構造です。Prolog は、構造体と述語 (別の言語では関数呼び出しと考えられるもの) が構文を共有しているという点で、ほとんどの言語とは少し異なります。したがって、ここでc/1何もしません。これは、(おそらく) あなたが私たちと共有していないコード内の何かを通じて意味を付与されるマーカーにすぎません。

具体例を挙げましょう。

eval(c(X), X2) :- X2 is (X*2) + 3.
eval(q(X), X2) :- X2 is X / 3.

something_to_do(c(14)).
something_to_do(q(21)).

このコードでは、何もc/1q/1ませ。クエリsomething_to_do/1を実行すると、構造が返されます。

?- something_to_do(X).
X = c(14) ;
X = q(21) ;
false.

しかし、その構造体を渡すと、eval/2取得する構造体に応じて何かを行います。したがってeval/2、構造q/1c/1意味を吹き込むと言えます (ただし、「意味を吹き込む」は、いかなる意味でも公式の Prolog 命名法ではありません)。

?- something_to_do(X), eval(X, Y).
X = c(14), Y = 31 ;
X = q(21), Y = 7 ;
false.

ここも同じ話です。c/1これは組み込みの述語ではないため、コードベースを検索してその意味を調べる必要があります。

: 同じコードベースに同じ名前の構造体と述語を同時に持つことができます。たとえば、次のような述語を追加できます

q(foo).
q(bar).
q(X) :- even(X).

q/1そして、この述語は、上記の構造とまったく重複していません。これは、Prolog の楽しい混乱の 1 つにすぎません (後で、強力で壮大であることが判明します)。構造を構築することと、目標を統一しようとすることの間には大きな違いがあります。

于 2013-04-23T02:46:02.303 に答える