【问题标题】:Swi-Prolog - Finding X Based on DefinitionSwi-Prolog - 根据定义找到 X
【发布时间】:2013-06-04 02:44:54
【问题描述】:

我使用 Swi-Prolog 是因为我认为 Prolog 的使用有点奇怪。我之所以这么说是因为除了 Watson,我不知道人们通常使用 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 生成这样的列表?

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

    如果您实际输入?- emotion(X,Y).,您只会得到false. 作为答案。

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

    (我认为你应该有 distinct 谓词用于“原始数据”和分类。)

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

    【讨论】:

    • 情绪(X,Y)的原因。出现错误是因为我没有包括情绪(焦虑,素数)之类的素数。在我发布的代码中。谢谢!以前从不知道Body。但是 [user] 命令是什么?这是某种允许您直接修改/附加程序的方式吗?
    • 是的,它是?- consult(user). 的简写,当我点击^D(或写end_of_file.)时,会查询该文件。
    • 知道了。我想以后会有用的。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2018-12-05
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多