prolog - niños - union de conjuntos ejemplos graficos
Unión de dos conjuntos de variables. (2)
Dadas dos listas de variables, ¿cuál es la forma más compacta y canónica en ISO Prolog para determinar la unión de ambas? Es decir, queremos una definición para los predicados (meta-lógicos)
varset_union(VarSet1, VarSet2, Union)
y para una lista de listas
varset_union(VarSets, Union)
donde Union
es una lista de variables únicas del VarSet
s dado.
Aquí hay una descripción general de los elementos incorporados en ISO / IEC 13211-1: 1995, incluyendo Cor.2: 2012.
Basándome en la gran respuesta de Tudor, he ideado una definición de varset_union/3
que es más compacta por 2 caracteres:
varset_union(VarSet1, VarSet2, Union):-
term_variables(VarSet1+VarSet2, Union).
;-)
Solución utilizando term_variables/2
:
varset_union(VarSet1, VarSet2, Union):-
term_variables([VarSet1|VarSet2], Union).
varset_union(VarSets, Union):-
term_variables(VarSets, Union).
Solución utilizando 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).