如何使指令 "initialization" 使用 ;在序言?

How to make the directive "initialization" use ; in Prolog?

所以我有一个名为 confirm.

的谓词

这个谓词有 3 种可能的形状:

confirm([ ]):-!.
confirm():-
confirm([arc(X,Y)|T]) :-

我希望这个谓词在我执行我的文件时自动激活。我读过为了实现这一点,我需要使用指令 initialization.

所以,首先我用解释器执行我的文件:

myName@myName-VirtualBox:~/dir/$ swipl fileONE.pl

然后在我的代码中,我有这个:

:- initialization(confirm).

问题是它只能部分工作...让我解释一下。

我在另一个文件中有一些图形结构 - 我们称之为 fileTWO.pl。图形的形式为:

:- dynamic arc/2.
:- dynamic graphe/2.

graph(g1,[arc(x,y),arc(x2,y2),arc(x3,y3)...]).
graph(g2,[arc(a,b),arc(a2,b2),arc(a3,b3)...]).
graph(g3,[arc(a,b),arc(a2,b2),arc(a3,b3)...]).
...

基本上,confirm 谓词将弧断言到我的“数据库”中。如果我有 3 个图,就像上面的例子 (g1, g2, g3),那么我需要在使用 confirm[= 时使用 ; 55=] 以添加所有图形。

下面是我如何手动使用谓词 confirm

?- confirm().
true ;
true ;
true .

这正是我想要的。

所以这是我的问题。 当我使用指令 initialization 时,它只如果我能说的话,第一个 true。所以只有我的第一张图会被断言。

因此我的问题是如何让谓词在我的文件启动时执行并执行每个“实例”或每个“循环”(我不知道怎么说)。

一个解决方案是改用:

:- initialization((confirm,fail;true)).

即一个failure-driven循环作为初始化目标。