小编Jen*_*sen的帖子

将 SWI-Prolog 代码构建到模块中,用于多个算法和数据集的单元测试

我最后一个问题下方的评论中详细说明讨论:我正在寻找有关构建 SWI-Prolog 代码的技术或最佳实践的建议,以便能够使用和测试算法及其支持模块的替代、可互换实现。

当前情况可以使用以下虚构的小示例来说明:用户提供一些输入数据 (file data.pl) 并加载具有要应用的算法(file ) 的模块graph.pl。算法模块本身使用来自另一个模块(文件path.pl)的辅助谓词,而后者又需要访问用户提供的数据:

文件“ data.pl”(输入数据集):

:- use_module(graph).

edge(a,b).
edge(b,c).
edge(c,d).
Run Code Online (Sandbox Code Playgroud)

文件“ graph.pl”(算法):

:- module(graph, [reachable/2]).
:- use_module(path).

reachable(X,Y) :-
    path(X,Y), !.
reachable(X,Y) :-
    path(Y,X), !.
Run Code Online (Sandbox Code Playgroud)

文件“ path.pl”(带有辅助谓词的模块,注意它访问 中的数据user):

:- module(path, [path/2]).

path(X,X).
path(X,Y) :-
    user:edge(X,Z),
    path(Z,Y).
Run Code Online (Sandbox Code Playgroud)

对于将算法应用于单个输入数据集和算法的单个实现的用例,这完全没问题:

?- [data].
true.

?- reachable(a,a).
true.

?- reachable(a,d).
true.

?- reachable(d,a).
true.
Run Code Online (Sandbox Code Playgroud)

现在假设我有大量的数据集,以及graphpath模块的多个替代实现(具有相同的接口,即导出的谓词)。对于(小)举例的目的,让我们假设我们文件中的数据文件data1.pldata2.pl,帮手谓语模块path1.plpath2.pl和算法模块 …

unit-testing module prolog composition swi-prolog

5
推荐指数
1
解决办法
499
查看次数

标签 统计

composition ×1

module ×1

prolog ×1

swi-prolog ×1

unit-testing ×1