我是Prolog的新手,请不要炸开我。
每当我不得不查询Prolog数据库时,我都会使用谓词Consult / 1:
consult(:File)
现在,我注意到谓词还存在
open(+SrcDest, +Mode, --Stream, +Options)
允许读取数据库。 除了可能无法修改数据库之外,还可能是咨询和打开之间的区别(这是咨询和打开之间的区别)(可能是每个谓词都可以打开的文件扩展名,或者可能是因为咨询读取了事实和规则,而打开时我们可以读取事实和规则)条款)?
答案 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/3
或open/4
可以创建,写入文件等等。