我将Swi-Prolog用于我认为有点奇怪的Prolog用法。我这么说的原因是,除了Watson,我不知道人们通常使用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生成这样的列表?
发布于 2013-06-04 14:46:57
我可以找到情感(X,Y)。
如果你实际输入的是?- emotion(X,Y).
,你得到的答案就是false.
。
当您添加这些规则所需的一些事实时,例如,assert(emotion(anxiety,prime)).
,您将获得X=anxiety Y=emotion
。
(我认为你应该对“原始数据”和分类有不同的谓词。)
Prolog允许检查程序,主要的‘自反’内置是clause/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))).
这允许在提供“导航”工具后,对程序进行元解释(参见here获得清晰的介绍),并检查任何细节。当然,像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].
https://stackoverflow.com/questions/16909041
复制相似问题