swi prolog can';不包括外部文件?
假设我有一个包含以下内容的文件swi prolog can';不包括外部文件?,prolog,swi-prolog,Prolog,Swi Prolog,假设我有一个包含以下内容的文件main.pl /* I tried these one at a time, not all at once... */ [externalFile]. ['externalFile']. ['externalFile.pl']. ['./externalFile.pl']./*this was an answer to a similar SO question*/ consult(externalFile). /*... etc ...*/ 现在让我们使用它
main.pl
/* I tried these one at a time, not all at once... */
[externalFile].
['externalFile'].
['externalFile.pl'].
['./externalFile.pl']./*this was an answer to a similar SO question*/
consult(externalFile).
/*... etc ...*/
现在让我们使用它
$ swipl -l externalFile.pl
/* 12 second loading delay */
/* everything works perfect! */
$ swipl -l main.pl
/* 0 second loading delay */
/* let's try anything from externalFile... */
ERROR: toplevel: Undefined procedure: [...]
/* main.pl might as well be empty */
?- consult(externalFile).
/* 0 second loading delay */
true.
/* true? oh my bad! Lets try again... */
ERROR: toplevel: Undefined procedure: [...]
?- [externalFile].
/* 12 second loading delay... seems better... */
true.
/* been lied to before... */
/* and yet every thing works perfect now! */
注意:consult(externalFile)。
仅在consult(externalFile)中时无效。
位于main.pl
中。否则,consult(externalFile)。
在终端会话中成功导入文件
那么,如果终端是唯一可以使用导入命令的地方,我如何编写源代码而不必将整个程序复制粘贴到终端(或者让我所有的程序源代码都有一个15兆字节以上的文件大小,相当于手动包含的文件大小!)
注意:我还检查了行分隔符编码(dos vs windows)(这是对另一个问题的回答)
注:直接在main.pl work fine中定义的独立子句操作,如
consult
,在Prolog中称为指令。Prolog识别Prolog指令的方式不同,具体取决于您是使用交互式环境,还是从Prolog源文件执行指令
在交互式环境中,只需在?-
提示符处键入指令:
?- consult('myfile').
当您查阅一个文件时,Prolog将该文件视为一系列事实和规则的断言。但是,如果Prolog看到:-
运算符,它会将该行视为文件中的指令。因此,从文件中,必须使用该运算符:
:- consult('myfile').
括号[]
是consult()
的缩写。您正在为Prolog提供一个要查阅的文件列表。上述情况相当于:
?- [myfile].
及
也有可以接受的不同形式。consult
参数必须是原子。如果您有一个名为myfile.pl
的文件,可以通过以下方式查阅:
:- [myfile].
:- ['myfile'].
:- ['myfile.pl'].
同样地:
:- consult(myfile).
:- consult('myfile').
:- consult('myfile.pl').
consult(myfile.pl)
或[myfile.pl]
将导致错误,因为如果没有引号,myfile.pl
将不会被视为单个原子
咨询列表([]
)表单将接受多个文件:
:- [myfile, anotherfile].
针对您的评论:
查阅(外部文件)。
仅当
consult(externalFile)。
位于main.pl
中
当您将
consult(externalFile)
放在您所查阅的文件(如main.pl
)中的一行上时,您告诉Prolog您希望断言术语(在本例中是事实),consult(externalFile)
,它由functorconsult
组成,并且有一个原子参数,externalFile
。因此,它确实做了一些事情,只是没有达到您的预期。请参阅:您应该查看Prolog文档<代码>[]在此上下文中与consult()
相同。这些是指令。指令要求:-
。因此,例如,:-[externalFile]。
或:-consult(externalFile)。
@潜伏者为什么不作为答案来写,似乎足够完整并且非常有用:)?
:- [myfile, anotherfile].