如何使指令 "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循环作为初始化目标。
所以我有一个名为 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循环作为初始化目标。