我想知道是否可以在 prolog 中分隔文件,例如:我想让我的界面、规则、事实、咨询在单独的文件中并使它们一起工作。
2 回答
是的 - 查看 SWI-Prolog 文档中的“模块”。
简而言之,您查阅一个文件,它会加载其他文件。所以,假设你有 a.pl、b.pl 等等
这是b.pl
Bear(X) :- write('我看到一只熊叫'), writeln(X). Bull(X) :- write('我看到一头公牛'), writeln(X).
在 b.pl 顶部
放
:- 模块(b,[bear/1])。
现在您可以在此文件之外使用 Bear(/1 表示“带有一个参数”)。
在 a.pl 中
:- 使用模块(b)。
请注意,上面没有 .pl
然后你可以参考熊
最终程序
a.pl
:- 使用模块(b)。
去:-熊('Yogi')。
b.pl
:- 模块(b,[bear/1])。
Bear(X) :- write('我看到一只熊叫'), writeln(X). Bull(X) :- write('我看到一头公牛'), writeln(X).
通过这种方式,您可以将诸如 Bull/1 之类的内容设置为单个模块的私有。
简短的回答,是的。长答案,取决于您所说的“界面”是什么意思以及您的要求有多简单或复杂。正如 mbratch 所指出的,ISO Prolog 标准include/1
指令可用于在包含这些谓词定义的文件中包含例如一组谓词指令。另一方面,如果您的应用程序需要同一接口的多个实现,您可以将 Prolog 模块与include/1
指令一起使用,其中每个模块将根据您想要的接口提供实现,或者使用 Logtalk,它提供接口作为第一类实体。但是,更合理的建议和详细的答案需要您提供有关您要完成的工作的更多信息。