在SWI Prolog中打开vs咨询
我对Prolog还不熟悉,请别烦我 每当我必须查阅prolog数据库时,我都使用谓词consult/1:在SWI Prolog中打开vs咨询,prolog,Prolog,我对Prolog还不熟悉,请别烦我 每当我必须查阅prolog数据库时,我都使用谓词consult/1: consult(:File) 现在,我注意到还存在谓词open open(+SrcDest, +Mode, --Stream, +Options) 它允许读取数据库。 除了修改数据库的可能性(consult不允许),consult和open之间的区别是什么(可能是每个谓词可以打开的文件扩展名,或者可能是因为consult读取事实和规则,而open可以读取术语) 使用consult/1似乎
consult(:File)
现在,我注意到还存在谓词open
open(+SrcDest, +Mode, --Stream, +Options)
它允许读取数据库。
除了修改数据库的可能性(consult不允许),consult和open之间的区别是什么(可能是每个谓词可以打开的文件扩展名,或者可能是因为consult读取事实和规则,而open可以读取术语) 使用
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.
此外,consult似乎只接受具有字典结构的.pl
文件。另一方面,使用open/3
,您可以访问每种类型的文件,也可以逐字符读取,但无法访问写入文件的谓词和事实:
run:-
open('prova.pl',read,Str),
findall(A,fact(A),L),
hello,
writeln(L).
?- run.
ERROR: Undefined procedure: fact/1
显然,使用
open/3
或open/4
可以创建、写入文件等。注意事实和规则(以及指令)是术语。consult
断言文件的内容open
没有。但是,为什么事实和规则也被用作谓词?我不确定我是否理解你的问题。这与你在帖子中的要求不同。Prolog中的谓词是一组具有相同名称的事实和规则。@Koinos Prolog不关心您使用的文件扩展名,只要您指定它。.pl
扩展名是Prolog源文件的常用扩展名,您只需使用[foo]
即可查阅foo.pl
。但是如果你有foo.dat
,你可以咨询['foo.dat']
。