首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swi-Prolog -基于定义的X查找

Swi-Prolog -基于定义的X查找
EN

Stack Overflow用户
提问于 2013-06-04 10:44:55
回答 1查看 84关注 0票数 1

我将Swi-Prolog用于我认为有点奇怪的Prolog用法。我这么说的原因是,除了Watson,我不知道人们通常使用Prolog做什么。

无论如何,我正在编写一个prolog程序,用于根据我告诉它的内容来定义情绪:

代码语言:javascript
运行
复制
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生成这样的列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 14:46:57

我可以找到情感(X,Y)。

如果你实际输入的是?- emotion(X,Y).,你得到的答案就是false.

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

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

Prolog允许检查程序,主要的‘自反’内置是clause/2。在你的程序中:

代码语言:javascript
运行
复制
?- 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这样的陈述必须详细说明:焦虑是作为原始的发生的吗,等等。

例如

代码语言:javascript
运行
复制
?- [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].
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16909041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档