将知识库转换为prolog

时间:2016-12-14 09:03:38

标签: prolog logic

新任务:

我的包里还有一套水果对象:

apple(b).
orange(c).
pear(d).
carrot(e).
onion(f).
pepper(g).

这些是规则:

  1. ∀x,水果(x)V蔬菜(x)[一切都是水果或蔬菜]
  2. ∀x,Apple(x) - >红色(x)V绿色(x)[苹果是红色或绿色]
  3. ∀x,Apple(x)V Orange(x)V Pear(x)) - >水果(x)[苹果,橘子和梨是水果]
  4. ∀x,胡萝卜(x)V Pepper(x) - >蔬菜(x)[胡萝卜和辣椒是veges]
  5. ∀x,fruit(x) - >美味(x)[所有水果味道鲜美]
  6. ∀x,胡萝卜(x) - >美味(x)[所有胡萝卜味道鲜美]
  7. ∀x,洋葱(x) - > ¬tasty(x)[洋葱不好吃]
  8. 旧任务已完成

    1. ∀x,Dogs(x)V Cats(x)[一切都是狗或猫]
    2. ∀x,GShephard(x) - >黑色(x)V白色(x)[germanshephard是黑色或白色]
    3. ∀x,GShephard(x)V Canine(x)V Rottweiler(x)) - >狗(x)[germanshephard,canine和rottweiler是狗]
    4. ∀x,lion(x) - >毛茸茸的(x)[所有狮子都毛茸茸]
    5. ∀x,fish(x) - > ¬hairy(x)[鱼不毛茸茸]
    6. 根据丹尼尔帮助我学习的内容以及我自己尝试过的内容,这是我提出的代码:

      % the Facts
      
      apple(a).
      apple(b).
      orange(c).
      pear(d).
      carrot(e).
      onion(f).
      pepper(g)
      

      我希望能够将这些问题提交给我的知识库:

      1. 什么水果是红色的?
      2. 洋葱好吃吗?
      3. 什么东西上色?
      4. 有美味的蔬菜吗?
      5. 到目前为止,当我使用查询时,只有2和3有效:2 tasty(f)返回false,我认为是正确的,3我使用coloured(X)并返回苹果。知道如何获得询问查询以获得1和4的答案吗?

1 个答案:

答案 0 :(得分:1)

让我们从第一个开始:

dog_or_cat(X) :- dog(X) ; cat(X).

这也可以用多个子句表示:

dog_or_cat(X) :- dog(X).
dog_or_cat(X) :- cat(X).

规则#2将类似。

规则#3。像这样的陈述在Prolog中显得“倒退”是很常见的。这是因为Prolog真的试图证明某些东西,并且要做到这一点,它必须履行条款的主体。那么让我们来看看它:

dog(X) :- gshephard(X) ; canine(X) ; rottweiler(X).

当Prolog看到dog(X)试图找到gshephard(X)的解决方案时,会做什么。如果失败了,它会尝试canine(X)等。这种情况按照一定的顺序发生,既是计算所必需的,也是实际逻辑和Prolog之间的主要区别,但无论如何,通常意味着什么在Prolog中处理。

规则4和5类似于3,但您需要知道Prolog中的否定由\+运算符提供。

修改:回答您的新问题:

red_fruit(X) :- fruit(X), red(X).  % question 1
tasty_veg(X) :- vegetable(X), tasty(X). % question 4

看起来你在如何在Prolog中说“和”时遇到了麻烦。它只是“,”意思是满足这个,然后是那个。 red_fruit(X)被解读为“证明X是红色果实,首先证明X是果实,然后证明X是红色的。”