是否与Prolog建立了关系?

时间:2013-09-30 12:00:00

标签: prolog

我知道这可能是一个愚蠢的问题,但我只是阅读Bratko Prolog Programming for artificial intelligence的第一章。

其中一个程序有

之类的子句
parent(ann, pat).

我的问题:父母,这是Prolog内置的东西吗?或者它是动态处理的东西。我可以去发明像:

dog(ann, pluto).

2 个答案:

答案 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).

您在两个对象dogann之间定义关系pluto,这些对象称为atom并且它们是常量。 然后,您可以查询数据库

| ?- dog(ann, pluto).
yes

Prolog会告诉您数据库中是否存在已定义的关系

| ?- dog(ann, oleg).
no