【发布时间】:2014-10-09 12:39:27
【问题描述】:
对不起,这可能以前被问过,但我找不到一个好的答案。
我正在编写一个 Prolog 作业,我们必须在其中编写一个带有插入、删除等功能的数据库。我目前卡在插入部分。我正在尝试为此使用tell、listing 和tell,但结果通常是不可预测的,会删除文件的随机部分。这是我的数据库的完整代码,banco.pl:
:- dynamic progenitor/2.
progenitor(maria,joao).
progenitor(jose,joao).
progenitor(maria,ana).
progenitor(jose,ana).
insere(X,Y) :- dynamic progenitor/2, assert(progenitor(X,Y)).
tell('banco.pl'), listing(progenitor), told.
然后我在 SWI-Prolog 上运行以下命令:
insere(luiz,luiza).
并在banco.pl 上得到以下结果:
:- dynamic progenitor/2.
progenitor(maria, joao).
progenitor(jose, joao).
progenitor(maria, ana).
progenitor(jose, ana).
请注意,我尝试插入的子句甚至不在文件中,并且缺少定义 commit 和 insere 的行。
我该如何正确地做到这一点?
【问题讨论】:
-
您在
insere/2谓词的定义中有错字。在谓词定义的第一行末尾有一个.(子句结尾)而不是,(连词)。 -
表达式
dynamic progenitor/2不属于谓词子句(在这种情况下为insere/2),因为它是一个指令,并且您已经在程序开始时发出了该指令。我很惊讶您没有收到错误消息。 -
你需要使用爱丁堡式的IO吗?
标签: prolog