Succeeds if Structs is a list of length Length, whose elements all have the same functor Name/Arity. Operationally, this can be used to either generate a list with of this form, or to check whether an existing list corresponds to it.
This is (modulo nondeterminism) similar to
( foreach(S,Structs), count(_,1,Length), param(Name,Arity) do
functor(S,Name,Arity)
)
Note that (like in the underlying functor/3 predicate), if Arity is zero, Name can be any atomic term (including number or string).
% fill a list with structure skeletons
?- terms_functor(Ss, 3, f, 2).
Ss = [f(_275,_276), f(_278,_279), f(_281,_282)]
Yes (0.00s cpu)
% check whether all elements have same toplevel functor
?- terms_functor([f(a),f(b)], L, F, A).
L = 2
F = f
A = 1
Yes (0.00s cpu)
% complete a list acccording to a prototype
?- terms_functor([f(a)|Ss], 4, _, _).
Ss = [f(_190), f(_194), f(_198)]
Yes (0.00s cpu)
% fill a list with an atomic term (arity 0)
?- terms_functor(Ss, 3, 99, 0).
Ss = [99, 99, 99]
Yes (0.00s cpu)