【发布时间】:2018-02-27 22:35:38
【问题描述】:
假设我有一个文件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 中定义的独立子句可以正常工作
【问题讨论】:
-
您应该查看 Prolog 文档。在这种情况下,
[]与consult()相同。这些是指令。指令需要:-。因此,例如,:- [externalFile].或:- consult(externalFile).。 -
@lurker 为什么不写作为答案,看起来足够完整并且很有帮助:)?
标签: prolog swi-prolog