All the predicates in library(occurs)
have the same argument pattern:
{prefix}_{term|var}(SubTerm, Term[, Extra])
where Extra includes any other arguments. Why does the SubTerm
argument appear first? The answer involves library(call)
and
library(maplist)
. Here are some of the things you can do with the
arguments this way around:
terms_containing_term(SubTerm, Terms, Selected) :- include(contains_term(SubTerm), Terms, Selected). % if member(Term, Terms), then Term will be included in % Selected iff contains_term(SubTerm, Term) succeeds. terms_free_of_var(SubTerm, Terms, Selected) :- exclude(contains_var(SubTerm), Terms, Selected). % if member(Term, Terms), then Term will be included in % Selected iff contains_var(SubTerm, Term) fails. tallies_of_term(SubTerm, Terms, Tallies) :- maplist(occurrences_of_term(SubTerm), Terms, Tallies). % if nth1(N, Terms, Term), then nth1(N, Tally, Tallies) % where occurrences_of_term(SubTerm, Term, Tally).
The same argument order is used for sub_term/2
even though
it is not used in this way, in order to preserve consistency.