关系是否内置于Prolog中?

关系是否内置于Prolog中?,prolog,Prolog,我知道这可能是个愚蠢的问题,但我只是在读Bratko Prolog人工智能编程的第一章 第一个程序中有这样的子句 parent(ann, pat). 我的问题:家长,这是Prolog内置的东西吗?或者它是动态处理的东西。我能不能去发明一些东西,比如: dog(ann, pluto). 是的,你可以发明这样的东西。它被称为子句s,这种类型的子句被称为facts。事实是您的数据库在Prolog中的组成部分。当你说 dog(ann, pluto). 你定义两个对象之间的关系,这些对象称为原子,它

我知道这可能是个愚蠢的问题,但我只是在读Bratko Prolog人工智能编程的第一章

第一个程序中有这样的子句

parent(ann, pat).
我的问题:家长,这是Prolog内置的东西吗?或者它是动态处理的东西。我能不能去发明一些东西,比如:

dog(ann, pluto).

是的,你可以发明这样的东西。它被称为
子句
s,这种类型的子句被称为
fact
s。事实是您的数据库在Prolog中的组成部分。当你说

dog(ann, pluto).
你定义两个对象之间的关系,这些对象称为原子,它们是常量。 然后可以查询数据库

| ?- dog(ann, pluto).
yes
Prolog将告诉您数据库中是否没有定义的关系

| ?- dog(ann, oleg).
no

是的,你可以发明这样的东西。它被称为
子句
s,这种类型的子句被称为
fact
s。事实是您的数据库在Prolog中的组成部分。当你说

dog(ann, pluto).
你定义两个对象之间的关系,这些对象称为原子,它们是常量。 然后可以查询数据库

| ?- dog(ann, pluto).
yes
Prolog将告诉您数据库中是否没有定义的关系

| ?- dog(ann, oleg).
no

对。简单的答案是,你可以发明像这样的东西

dog(ann, pluto).
这些是prolog将保存在其内部数据库中的简单事实。这不是关系数据库。只是一些事实

父级未内置到Prolog中

它之所以有趣和有用,是因为您可以创建各种规则来扩展和确认关系

grandparent(X,Z) :- parent(X,Y), parent(Y,Z). 
那你可以问

grandparent(ann,florence)
如果它是真的,那么它将成功,否则它将失败

或者你可以问

grandparent(ann,X)
prolog应该试着找到并打印出安的所有祖父母

或者如果你扩展你的事实基础来包括

mother(ann, jane)
father(ann, jim)
mother(jane, janice)
etc
etc
然后

可以推断


建议你继续阅读你的书,一切都会被揭示。

是的。简单的答案是,你可以发明像这样的东西

dog(ann, pluto).
这些是prolog将保存在其内部数据库中的简单事实。这不是关系数据库。只是一些事实

父级未内置到Prolog中

它之所以有趣和有用,是因为您可以创建各种规则来扩展和确认关系

grandparent(X,Z) :- parent(X,Y), parent(Y,Z). 
那你可以问

grandparent(ann,florence)
如果它是真的,那么它将成功,否则它将失败

或者你可以问

grandparent(ann,X)
prolog应该试着找到并打印出安的所有祖父母

或者如果你扩展你的事实基础来包括

mother(ann, jane)
father(ann, jim)
mother(jane, janice)
etc
etc
然后

可以推断


建议你继续阅读你的书,一切都会被揭示。

虽然Prolog不是Postgres意义上的RDBMS,但它也不是关系数据库。区别很模糊。正确。如果你读了我的答案。我就是这么说的。我想强调的是,当prolog用户谈论事实或规则数据库时,他们并不是在谈论世界上其他人认为的关系数据库。有些版本的Prolog支持磁盘上或内存中的B以及用于高速查找的红黑树,因为Prolog的“数据库访问”速度较慢。但因为你可以在+/-8小时内解决一些问题,一个人可能需要一周的时间,你通常不会在意。我不认为Prolog数据库访问速度慢。毕竟,数据库在内存中并已编制索引。是和否。因为它是一个事实数据库。它通常只是事实域中条目的双链接列表。使用“统一”,可以使用任何字段或字段组合来满足查询。通常不是每个字段都被索引。因此unifier必须读取每个条目并比较绑定字段是否与事实字段匹配。这就是为什么许多Prolog提供了一个B-Tree附加组件,以便您可以在事实及其字段上添加多个索引。虽然Prolog不是Postgres意义上的RDBMS,但它也不是关系数据库。区别很模糊。正确。如果你读了我的答案。我就是这么说的。我想强调的是,当prolog用户谈论事实或规则数据库时,他们并不是在谈论世界上其他人认为的关系数据库。有些版本的Prolog支持磁盘上或内存中的B以及用于高速查找的红黑树,因为Prolog的“数据库访问”速度较慢。但因为你可以在+/-8小时内解决一些问题,一个人可能需要一周的时间,你通常不会在意。我不认为Prolog数据库访问速度慢。毕竟,数据库在内存中并已编制索引。是和否。因为它是一个事实数据库。它通常只是事实域中条目的双链接列表。使用“统一”,可以使用任何字段或字段组合来满足查询。通常不是每个字段都被索引。因此unifier必须读取每个条目并比较绑定字段是否与事实字段匹配。这就是为什么许多序言都提供了一个B树附加组件,这样您就可以在事实及其字段上添加多个索引。