新任务:
我的包里还有一套水果对象:
apple(b).
orange(c).
pear(d).
carrot(e).
onion(f).
pepper(g).
这些是规则:
旧任务已完成:
根据丹尼尔帮助我学习的内容以及我自己尝试过的内容,这是我提出的代码:
% the Facts
apple(a).
apple(b).
orange(c).
pear(d).
carrot(e).
onion(f).
pepper(g)
我希望能够将这些问题提交给我的知识库:
到目前为止,当我使用查询时,只有2和3有效:2 tasty(f)
返回false,我认为是正确的,3我使用coloured(X)
并返回苹果。知道如何获得询问查询以获得1和4的答案吗?
答案 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是红色的。”