我在编写要添加以下事实的知识库时遇到了问题:
蜘蛛不是哺乳动物
spider(X):- \+ (mammal(X)).但是,当我查询(mammal(X))时,它会给出错误吗?
有没有关于如何写的帮助??
发布于 2015-01-05 15:50:42
下面这两句话是不一样的:“蜘蛛不是哺乳动物。”和“不是哺乳动物的东西就是蜘蛛”。
你的子句:
spider(X):- \+ mammal(X).是第二个句子的表示。
假设你有这样的知识库:
mammal(tiger).
spider(X):- \+ mammal(X).并查看一些示例查询:
?- spider(tiger).
false.
?- spider(tarantula).
true.
?- spider(X).
false.有问题的是最后一个查询,因为人们期望X与所有已知的爬行器统一。但是,当X是一个自由变量时,目标\+ mammal(X)等同于“(在您的知识库中)没有哺乳动物”。其次,您没有实例化X的目标。因此,您可能希望将其更改为类似以下内容:
spider(X):- animal(X), \+ mammal(X).发布于 2015-01-05 15:51:37
我可以看到两个问题:第一个问题是一个简单的拼写错误:操作符是(+)/1,所以应该写这个子句
spider(X):- \+ mammal(X).第二个问题更复杂,既要理解也要解决。Prolog中的否定意味着在封闭领域知识下不可证明(参见CWA,Closed World Assumption)。在这个简单的上下文中的含义:您必须将已经实例化的X传递给子句
https://stackoverflow.com/questions/27775164
复制相似问题