Note on Argument Order

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.