给定两个变量列表,在 ISO Prolog 中确定两者并集的最紧凑和规范的方法是什么?也就是说,我们想要(元逻辑)谓词的定义
varset_union(VarSet1, VarSet2, Union)
和列表列表
varset_union(VarSets, Union)
其中Union
是给定VarSet
s 的唯一变量列表。
以下是ISO/IEC 13211-1:1995 中内置函数的概述,包括 Cor.2:2012。
给定两个变量列表,在 ISO Prolog 中确定两者并集的最紧凑和规范的方法是什么?也就是说,我们想要(元逻辑)谓词的定义
varset_union(VarSet1, VarSet2, Union)
和列表列表
varset_union(VarSets, Union)
其中Union
是给定VarSet
s 的唯一变量列表。
以下是ISO/IEC 13211-1:1995 中内置函数的概述,包括 Cor.2:2012。
解决方案使用term_variables/2
:
varset_union(VarSet1, VarSet2, Union):-
term_variables([VarSet1|VarSet2], Union).
varset_union(VarSets, Union):-
term_variables(VarSets, Union).
解决方案使用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).
基于 Tudor 的出色回答,我设计了一个varset_union/3
更紧凑的 2 个字符的定义:
varset_union(VarSet1, VarSet2, Union):-
term_variables(VarSet1+VarSet2, Union).
;-)