module - SICStus 的 make/0 功能

标签 module prolog sicstus-prolog

如何确保所有模块(以及理想情况下已加载或包含的所有其他文件)都是最新的?发布时use_module(mymodule) , SICStus 比较文件的修改日期mymodule.pl并重新加载它,如果更新。还有include -ed 文件将触发重新编译。但它不会重新检查 mymodule 使用的所有模块。 .

简而言之,我怎样才能获得与 SWI 提供的 make/0 类似的功能? ?

最佳答案

SICStus Prolog 中没有任何东西可以提供这种功能。

一个大问题是当前的 Prolog 过于动态,以至于 make/0 之类的东西无法可靠地工作,除非是非常简单的情况。使用术语扩展、加载期间执行的目标(包括常见的文件加载目标)等功能,不可能知道如何可靠地重新加载文件。我没有仔细看过它,但大概是 SWI Prolog 中的 make/0 也有同样的问题。

我通常只是重新启动 Prolog 进程并再次加载“主”文件,即加载我需要的所有内容的文件。

PS。我无法在评论中获得代码格式,所以我把它放在这里:示例为什么 make/0 需要防范 'user' 作为来自 current_module/2 的文件:

| ?- [user].
% compiling user...
| :- module(m,[p/0]). p. end_of_file.

%  module m imported into user
% compiled user in module m, 0 msec 752 bytes
yes
| ?- current_module(M, F), F==user.
F = user,
M = m ? ;
no
| ?-

关于module - SICStus 的 make/0 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558948/

相关文章:

python - 导入python类,相对于哪里?

prolog - 了解 head 的这个序言实现

prolog - Prolog 中的 CLP(B) 加权 sat_count/3

prolog - 如何定位过度扩展目标的原因?

prolog:如何用 global_cardinality 判断列表至少有 N 个等于 M 的元素(M,N 是整数)

java - 如何创建依赖于另一个 JAR 的 JAR?

node.js - 如何使用 Typescript 在 node.js 服务器和浏览器之间共享代码

c - 在 Linux 中构建 PLX SDK 驱动程序产生 "No such file or directory"

prolog - 序言中的csymf和csym之间的区别

c - 将任意大小的整数从 Prolog 传递到 C