两个变量集的联合

fal*_*lse 17 prolog iso-prolog

给出两个变量列表,ISO Prolog中最紧凑和规范的方法是什么来确定两者的结合?也就是说,我们想要(元逻辑)谓词的定义

varset_union(VarSet1, VarSet2, Union)
Run Code Online (Sandbox Code Playgroud)

以及列表清单

varset_union(VarSets, Union)
Run Code Online (Sandbox Code Playgroud)

其中Union是给定VarSets 的唯一变量列表.

以下是ISO/IEC 13211-1:1995中内置插件概述,包括Cor.2:2012.

Tud*_*riu 13

解决方案term_variables/2:

varset_union(VarSet1, VarSet2, Union):-
    term_variables([VarSet1|VarSet2], Union).

varset_union(VarSets, Union):-
    term_variables(VarSets, Union).
Run Code Online (Sandbox Code Playgroud)

解决方案setof/3:

varset_union(VarSet1, Varset2, Union):-
    varset_union([VarSet1, VarSet2], Union).

varset_union([], []).
varset_union(VarSets, Union):-
    setof(Var, VarSet^(member(VarSet, VarSets), member(Var, VarSet)), Union).
Run Code Online (Sandbox Code Playgroud)