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 的唯一变量列表.
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)