
occurs.pl -- Finding and counting sub-termsThis is a SWI-Prolog implementation of the corresponding Quintus library, based on the generalised arg/3 predicate of SWI-Prolog.
contains_term(+Sub, +Term) is semidet
contains_var(+Sub, +Term) is semidet
free_of_term(+Sub, +Term) is semidet
free_of_var(+Sub, +Term) is semidet
occurrences_of_term(@SubTerm, @Term, ?Count) is det?- freeze(S, integer(S)), occurrences_of_term(S, f(1,2,a), C). C = 2, freeze(S, integer(S)).
occurrences_of_var(@SubTerm, @Term, ?Count) is det
sub_term(-Sub, +Term)
sub_var(-Sub, +Term)
sub_term_shared_variables(+Sub, +Term, -Vars) is detAn example use-case is refactoring a large clause body by introducing intermediate predicates. This predicate can be used to find the arguments that must be passed to the new predicate.