Swi Prolog-基于定义查找X

Swi Prolog-基于定义查找X,prolog,Prolog,我使用Swi Prolog是因为我认为Prolog的使用有点奇怪。我之所以这么说是因为除了沃森,我不知道人们通常用Prolog做什么 在任何情况下,我都在制作一个prolog程序,根据我所说的内容来定义情绪: emotion(anxiety,emotion):- emotion(anxiety,prime). emotion(fear,emotion):- emotion(anxiety,prime), emotion(when,prime), emotion(

我使用Swi Prolog是因为我认为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)。这就是我用两个参数定义的一切

问题是如何根据定义找到单词?我能告诉prolog找出所有包含某种焦虑定义的情绪吗?从技术上讲,焦虑是一种情绪、恐惧和“恐惧”的一种,因为我通过惊奇和恐惧(包含焦虑)或惊奇和厌恶来定义它

为了让prolog生成这样一个列表,我是否可以使用一个命令,或者必须编写一些程序

我能找到情感(X,Y)

如果你真的输入了
?-情绪(X,Y)。
你会得到
错误。
作为答案

当您添加这些规则所需的一些事实时,例如,
assert(emotion(anxity,prime))。
您将得到
X=anxity Y=emotion

(我认为对于“原始数据”和分类,应该有不同的谓词。)

Prolog允许检查程序,主要的“自反”内置is/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))).
这允许在提供“导航”工具后,对程序进行元解释(请参阅以获得清晰的介绍),并检查任何细节。当然,像
焦虑的某种定义
这样的陈述必须详细说明:焦虑是否以原始状态出现,等等

比如说

?- [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].

情绪的原因(X,Y)。出现错误是因为我没有包括情绪(焦虑,情绪)等基本要素。在我发布的代码中。谢谢我以前从没见过尸体。但是[user]命令是什么?这是允许您直接修改/附加程序或其他东西的某种方式吗?是的,这是
?-consult(user)的缩写。
,当我点击^D(或写入
文件结尾。
)时,文件被查阅。明白了。我想那以后会有用的。再次感谢你的帮助。