Prolog数据库规则

时间:2014-01-11 11:53:08

标签: windows prolog

我有2个关于Prolog编程的问题。

我有一个如下所示的数据库:

message(bob,kelly).
message(patrick,ann).

数据库以此格式继续。所以我的问题是在SWI Prolog中如何编写规则并在数据库打开时保存它,以确定bob是否已发送或接收任何消息?

另一个是编写一条规则来查看两个人之间是否发送或接收了消息我知道如何做到这一点,但使用SWI Prolog确实令人困惑。

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我认为你对Prolog的“数据库”概念感到困惑。通常,“关系数据库”应理解为RDBMS,它是关系数据库管理系统的首字母缩写。 Prolog为您提供了一个关系数据库,但它本身并不是一个数据库管理系统

Prolog不“打开数据库”,它“查询文件”。执行[foo]时,它只会打开foo.pl,将内容解析到内存中,然后关闭文件。该文件不会保持“打开”状态。如果您asserta/1retract/1关于源自该文件的事实,则更改发生在内存中,但Prolog不知道或不关心它们来自该文件,而Prolog将不会神奇地重建更改后的文件或将新文件写入磁盘的位置。

如果您希望Prolog知道Bob向Kelly发送了一条消息,那么您将不得不断言它。如果您希望文件在此之后保持最新,则必须打开该文件并将数据写入其中。更重要的是,也许你必须明白,如果你运行多个Prolog,它们就不会以某种方式连接并共享一个数据库。他们都将在他们自己的内存商店中运营。这意味着如果您确实难以使更改持久化,则必须确保只有一个进程使用该文件。如果你有多个,他们会踩到对方的变化。