Windows Prolog数据库规则
我有两个关于Prolog编程的问题 我有一个如下所示的数据库:Windows Prolog数据库规则,windows,prolog,Windows,Prolog,我有两个关于Prolog编程的问题 我有一个如下所示的数据库: message(bob,kelly). message(patrick,ann). 数据库继续使用此格式。因此,我的问题是在SWI Prolog中,如何在数据库打开时编写规则并保存它,以确定bob是否发送或接收任何消息 另一个是写一个规则,看看两个人是否在他们之间发送或接收消息。我知道怎么做,但使用SWI Prolog确实很混乱 感谢所有的帮助 我想你已经被Prolog中“数据库”的概念弄糊涂了。“关系数据库”通常被理解为RDBM
message(bob,kelly).
message(patrick,ann).
数据库继续使用此格式。因此,我的问题是在SWI Prolog中,如何在数据库打开时编写规则并保存它,以确定bob是否发送或接收任何消息
另一个是写一个规则,看看两个人是否在他们之间发送或接收消息。我知道怎么做,但使用SWI Prolog确实很混乱
感谢所有的帮助 我想你已经被Prolog中“数据库”的概念弄糊涂了。“关系数据库”通常被理解为RDBMS,它是关系数据库管理系统的首字母缩写。Prolog为您提供了一个关系数据库,但它本身并不是一个数据库管理系统 Prolog不会“打开数据库”,而是“查阅文件”。当您执行
[foo]
操作时,它只会打开foo.pl
,将内容解析到内存中,然后关闭文件。文件不会保持“打开”状态。如果对源自该文件的事实执行asserta/1
或retract/1
,则更改会发生在内存中,但Prolog不知道或不关心这些更改是否来自该文件,并且Prolog不会在文件更改后神奇地重新生成该文件,也不会将新文件写入磁盘
如果您想让Prolog知道Bob向Kelly发送了一条消息,您必须声明它。如果您希望该文件在此之后保持最新,则必须打开该文件并将数据写入其中。更重要的是,也许您必须了解,如果您运行多个序言,它们不会以某种方式连接并共享单个数据库。它们都将在内存存储中独立运行。这意味着,如果您确实不辞辛劳地使更改持久化,则必须确保只有一个进程使用该文件。如果您有多个,它们会互相践踏对方的更改。(1)将消息语句放入文件中,(2)运行prolog环境并包含该文件,(3)输入查询,例如消息(bob,X)。
您将看到prolog将为您提供数据中指示的X
值。