gpt4 book ai didi

prolog - swi-prolog 不能包含外部文件?

转载 作者:行者123 更新时间:2023-12-05 03:07:59 27 4
gpt4 key购买 nike

假设我有一个包含以下内容的文件 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). 会在终端 session 中成功导入文件。

如果终端是唯一可以使用导入命令的地方?


注意:我还检查了行分隔符编码(dos vs windows)(这是另一个问题的答案)

注意:直接在 main.pl 中定义的独立子句工作正常

最佳答案

consult 等操作在 Prolog 中称为指令。 Prolog 指令被 Prolog 识别的方式不同,这取决于您是在使用交互式环境,还是在执行来自 Prolog 源文件的指令。

在交互式环境中,只需在 ?- 提示符下输入一个指令:

?- consult('myfile').

当您查阅文件时,Prolog 将该文件视为一系列事实和规则断言。但是,如果 Prolog 看到 :- 运算符,它将把该行视为文件中的指令。因此,从文件中,您必须使用该运算符:

:- consult('myfile').

方括号 []consult() 的缩写。您正在为 Prolog 提供要查阅的文件列表。以上相当于:

?- [myfile].

:- [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). only has no effect when consult(externalFile). is in main.pl.

当您将 consult(externalFile). 单独放在您查阅的文件(如 main.pl)中的一行时,您是在告诉 Prolog 您希望断言术语(在本例中为 fact)consult(externalFile),它由仿函数 consult 组成并具有一个原子参数 externalFile。所以它实际上确实做了一些事情,只是不是您所期望的。

关于prolog - swi-prolog 不能包含外部文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com