1

私は Swi-Prolog を使用していますが、これは Prolog の少し奇妙な使い方だと思います。私がそう言う理由は、ワトソンを除いて、人々がPrologを通常何に使用するのか分からないからです.

いずれにせよ、私は自分の言うことに基づいて感情を定義するためのプロローグ プログラムを作成しています。

emotion(anxiety,emotion):-
    emotion(anxiety,prime).

emotion(fear,emotion):-
    emotion(anxiety,prime),
    emotion(when,prime),
    emotion(bad,prime).

emotion(horrified,emotion):-
    emotion(surprise,prime),
    (emotion(fear,emotion);emotion(aversion,prime)).

素数は単項であるため、問題ではありません。

感情 (X,Y) を見つけることができます。これは、2 つの引数で定義したすべてのものになります。

問題は、定義に基づいて単語を見つけるにはどうすればよいかということです。プロローグに、ある種の不安の定義を含むすべての感情を見つけるように指示できますか? 技術的には、感情、恐怖、および「恐怖」の1つとしての不安になります。これは、驚きと恐怖(不安を伴う)または驚きと嫌悪のいずれかで定義できるようにしたためです.

私が使用できるコマンドはありますか、それともプロローグにそのようなリストを生成させるために何かをプログラムする必要がありますか?

4

1 に答える 1

0

感情 (X,Y) を見つけることができます。

実際に入力すれば、答え?- emotion(X,Y).は同じです。false.

たとえば、これらのルールで必要ないくつかの事実を追加すると、assert(emotion(anxiety,prime)).が得られX=anxiety Y=emotionます。

( 「生データ」と分類には明確な述語が必要だと思います。)

Prolog では、プログラムを検査できます。最初に組み込まれている「再帰」は/2 です。あなたのプログラムで:

?- clause(emotion(X,Y),Body).
X = anxiety,
Y = emotion,
Body = emotion(anxiety, prime) ;
X = fear,
Y = emotion,
Body = (emotion(anxiety, prime), emotion(when, prime), emotion(bad, prime)) ;
X = horrified,
Y = emotion,
Body = (emotion(surprise, prime), (emotion(fear, emotion);emotion(aversion, prime))).

これにより、「ナビゲーション」ツールを提供した後、プログラムをメタ解釈し (明確な紹介についてはこちらを参照)、詳細を調べることができます。もちろん、次のようなステートメントはsome kind of definition of anxiety詳細にする必要があります: 不安は原初として発生しますか、など.

例えば

?- [user].
|: occurs(E,emotion(E,_)).
|: occurs(E,(A,B)) :- occurs(E,A);occurs(E,B).
|: occurs(E,(A;B)) :- occurs(E,A);occurs(E,B).
|: % user://1 compiled 0,20 sec, 4 clauses
true.

?- findall(E, (clause(emotion(E,_),B), occurs(anxiety,B)),L).
L = [anxiety, fear].
于 2013-06-04T06:46:57.457 に答える