我知道这可能是一个愚蠢的问题,但我只是阅读Bratko Prolog Programming for artificial intelligence的第一章。
其中一个程序有
之类的子句parent(ann, pat).
我的问题:父母,这是Prolog内置的东西吗?或者它是动态处理的东西。我可以去发明像:
dog(ann, pluto).
答案 0 :(得分:3)
是。简单的答案是你可以发明类似的东西。
dog(ann, pluto).
这些是prolog将在其内部数据库中保存的简单FACTS。这不是关系数据库。只是一个事实的集合。
父级不会构建到Prolog中。
有趣和有用的是,您可以创建各种规则来扩展和确认您的关系。
grandparent(X,Z) :- parent(X,Y), parent(Y,Z).
然后你可以问
grandparent(ann,florence)
这将成功,如果没有,则会失败。
或者你可以问
grandparent(ann,X)
和prolog应该尝试找到并打印出ann的所有祖父母
或者如果您扩展您的FACTS基础以包括
mother(ann, jane)
father(ann, jim)
mother(jane, janice)
etc
etc
然后
grandmother(X,Z) :- mother(X,Y), mother(Y,Z).
可以推断出来。
建议你继续阅读你的书,所有内容都会被曝光。
答案 1 :(得分:2)
是的,你可以发明这样的东西。它被称为clause
s,这种类型的子句称为fact
s。事实是您的数据库在Prolog中的组成部分。当你说
dog(ann, pluto).
您在两个对象dog
和ann
之间定义关系pluto
,这些对象称为atom
并且它们是常量。
然后,您可以查询数据库
| ?- dog(ann, pluto).
yes
Prolog会告诉您数据库中是否存在已定义的关系
| ?- dog(ann, oleg).
no