Module plunit测试显然在幕后创建了一个模块。。。但那个模块可以卸载吗?

Module plunit测试显然在幕后创建了一个模块。。。但那个模块可以卸载吗?,module,prolog,swi-prolog,plunit,Module,Prolog,Swi Prolog,Plunit,我想使用在SWI Prolog中实现的as以优雅的风格运行一些单元测试 所以我想直接在终端上输入它们: [user]. 然后复制粘贴: :- begin_tests(exercise). test(foo) :- bar. :- end_tests(exercise). 这很好用 。。。但是如果我再次通过[user].加载测试,就会有一种类似西方世界的体验: ?- [user]. |: :- begin_tests(exercise). ERROR: user://2:17: ERRO

我想使用在SWI Prolog中实现的as以优雅的风格运行一些单元测试

所以我想直接在终端上输入它们:

[user].
然后复制粘贴:

:- begin_tests(exercise).

test(foo) :- bar.

:- end_tests(exercise).
这很好用

。。。但是如果我再次通过
[user].
加载测试,就会有一种类似西方世界的体验:

?- [user].
|: :- begin_tests(exercise).

ERROR: user://2:17:
ERROR:    module/2: No permission to redefine module `plunit_exercise' (Already loaded from user://1)
Warning: user://2:17:
Warning:    Goal (directive) failed: user:begin_tests(exercise)
这个实现似乎为test
X
创建了一个模块
plunit\ux
。这是有道理的

但是有没有办法卸载测试模块
练习

一定有

请注意,您可以卸载带有模块的文件,但不能卸载模块

更新:


而不是使用
[user]输入代码。
并使用
[file]
使其工作。嗯。

因为我不知道如何重现你的问题,你必须自己测试一下

使用

由于它不是从模块导出的modules我猜
modules:destroy\u module(X)
应该可以工作

因为它不是导出的谓词,也没有文档记录


编辑

而不是使用
[user].
[file]
让它工作。嗯

用户
是预定义模块,文件不可用

?- current_module(X).
X = prolog ;
X = sysetm ;
X = user ;
X = predicate_options ;
X = base32 ;
X = read_util ;
X = win_menu ;
X = shlib ;
X = qsave ;
X = prolog_clause ;
X = prolog_history ;
X = pce_swi_hooks ;
X = prolog_stack ;
X = system ;
X = ansi_term ;
X = link_xpce ;
false.

警告!“嗨,德拉西人!”戴维顿霍夫-那里也有龙!你相信我有1986年版吗(1988年3月重印并更正)。。。贝尔电话实验室版权所有。从未读过:-(@DavidTonhofer
你相信吗
我当然相信。事实上,在第一本龙书出版之前,我参加了一门解析课,相信我,这些书极大地改变了编程中解析的可访问性。尽管许多人仍然认为正则表达式等同于解析,但可以访问适当的解析知识比40年前要好。我想我会在稍后的讨论中提出这个问题。在任何情况下都应该可以卸载模块,特别是当程序将其用作事实存储并希望稍后大量转储时(好的,它可以使用
retractall/1
,但为什么要麻烦呢?)。这就提出了很多关于事务性的问题,但您可以卸载文件,所以这些问题似乎已经解决了?