在SWI Prolog中公开与咨询

时间:2018-08-27 06:19:07

标签: prolog

我是Prolog的新手,请不要炸开我。

每当我不得不查询Prolog数据库时,我都会使用谓词Consult / 1:

consult(:File)

现在,我注意到谓词还存在

open(+SrcDest, +Mode, --Stream, +Options)

允许读取数据库。 除了可能无法修改数据库之外,还可能是咨询和打开之间的区别(这是咨询和打开之间的区别)(可能是每个谓词都可以打开的文件扩展名,或者可能是因为咨询读取了事实和规则,而打开时我们可以读取事实和规则)条款)?

1 个答案:

答案 0 :(得分:0)

使用consult/1与使用?- [filename]非常相似。使用程序中的consult/1,您可以访问写入文件的所有事实和谓词。因此,例如,如果您有一个像这样的文件data.pl

fact(a).
fact(b).
fact(c).

hello:-
    writeln('hello').

您可以创建文件test.pl,并使用data.pl的所有事实和谓词:

run:-
    consult(prova),
    findall(A,fact(A),L),
    hello,
    writeln(L).

?- run.
hello
[a,b,c]
true.

此外,咨询似乎只接受具有字典结构的.pl文件。另一方面,使用open/3,您可以访问每种类型的文件并逐字符读取char,但是无法访问写入文件的谓词和事实:

run:-
    open('prova.pl',read,Str),
    findall(A,fact(A),L),
    hello,
    writeln(L).

?- run.
ERROR: Undefined procedure: fact/1

很显然,使用open/3open/4可以创建,写入文件等等。