Next: , Previous: term_unify, Up: Top   [Contents]


100 term_vars

%--------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%--------------------------------------------------%
% Copyright (C) 1993-2000,2003-2009,2011-2012 The University of Melbourne.
% Copyright (C) 2014-2022 The Mercury team.
% This file is distributed under the terms specified in COPYING.LIB.
%--------------------------------------------------%
%
% File: term_vars.m.
%
% This file provides ways to find out what variables occur in terms.
%
%--------------------------------------------------%
%--------------------------------------------------%

:- module term_vars.
:- interface.

:- import_module list.
:- import_module term.

%--------------------------------------------------%
%
% Predicates that list the variables in one or more terms.
%

    % vars_in_term(Term, Vars):
    %
    % Vars is the list of variables contained in Term, in the order
    % obtained by traversing the term depth first, left-to-right.
    %
:- func vars_in_term(term(T)) = list(var(T)).
:- pred vars_in_term(term(T)::in, list(var(T))::out) is det.

    % As above, but with an accumulator: add the variables in the term
    % to the front of the initial value of the accumulator.
    %
:- pred vars_in_term_acc(term(T)::in, list(var(T))::in, list(var(T))::out)
    is det.

    % vars_in_terms(Terms, Vars):
    %
    % Vars is the list of variables contained in Terms, in the order
    % obtained by traversing the list of terms depth-first, left-to-right.
    %
:- func vars_in_terms(list(term(T))) = list(var(T)).
:- pred vars_in_terms(list(term(T))::in, list(var(T))::out) is det.

    % term_contains_var(Term, Var):
    %
    % True if Term contains Var. The second mode returns all the variables
    % in Term, one at a time.
    %
:- pred term_contains_var(term(T), var(T)).
:- mode term_contains_var(in, in) is semidet.
:- mode term_contains_var(in, out) is nondet.

    % terms_contain_var(Terms, Var):
    %
    % True if Terms contains Var. The second mode returns all the variables
    % in Terms, one at a time.
    %
:- pred terms_contain_var(list(term(T)), var(T)).
:- mode terms_contain_var(in, in) is semidet.
:- mode terms_contain_var(in, out) is nondet.

%--------------------------------------------------%
%--------------------------------------------------%