私はコードを持っています
newplan(状態、[c(状態リスト)]、[]、状態):- 満足(状態、状態リスト)。
c() 述語が何をするのかわかりません。インターネットで答えを検索しようとしましたが、見つかりませんでした。私を助けてください。
私はコードを持っています
newplan(状態、[c(状態リスト)]、[]、状態):- 満足(状態、状態リスト)。
c() 述語が何をするのかわかりません。インターネットで答えを検索しようとしましたが、見つかりませんでした。私を助けてください。
このコード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/1
しq/1
ません。クエリsomething_to_do/1
を実行すると、構造が返されます。
?- something_to_do(X).
X = c(14) ;
X = q(21) ;
false.
しかし、その構造体を渡すと、eval/2
取得する構造体に応じて何かを行います。したがってeval/2
、構造q/1
とc/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 つにすぎません (後で、強力で壮大であることが判明します)。構造を構築することと、目標を統一しようとすることの間には大きな違いがあります。