我知道这可能是一个愚蠢的问题,但我只是在阅读 Bratko Prolog Programming for AI 的第一章。
最早的程序之一有如下子句
parent(ann, pat).
我的问题:父母,这是 Prolog 内置的东西吗?或者它是动态处理的。我可以去发明一些东西吗:
dog(ann, pluto).
我知道这可能是一个愚蠢的问题,但我只是在阅读 Bratko Prolog Programming for AI 的第一章。
最早的程序之一有如下子句
parent(ann, pat).
我的问题:父母,这是 Prolog 内置的东西吗?或者它是动态处理的。我可以去发明一些东西吗:
dog(ann, pluto).
是的。简单的答案是你可以发明类似的东西。
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).
可以推断。
建议你继续阅读你的书,一切都会揭晓。
是的,你可以发明类似的东西。它被称为clause
s,这种类型的从句称为fact
s。事实就是你的数据库在 Prolog 中的构成。当你说
dog(ann, pluto).
您定义dog
两个对象之间的关系ann
和pluto
,这些对象称为atom
s 并且它们是常量。然后您可以查询您的数据库
| ?- dog(ann, pluto).
yes
Prolog 会告诉你数据库中是否没有定义的关系
| ?- dog(ann, oleg).
no