19 lines
490 B
Prolog
19 lines
490 B
Prolog
:- module(terms, [numbervars/3]).
|
|
|
|
:- use_module('src/prolog/lib/error.pl').
|
|
|
|
numbervars(Term, N0, N) :-
|
|
catch(internal_numbervars(Term, N0, N), error(E,Ctx),
|
|
( ( var(Ctx) -> Ctx = numbervars/3 ; true ), throw(error(E,Ctx) ) ) ).
|
|
|
|
internal_numbervars(Term, N0, N) :-
|
|
must_be(integer, N0),
|
|
can_be(integer, N),
|
|
term_variables(Term, Vars),
|
|
numberlist(Vars, N0, N).
|
|
|
|
numberlist([], N,N).
|
|
numberlist(['$VAR'(N0)|Vars], N0,N) :-
|
|
N1 is N0+1,
|
|
numberlist(Vars, N1,N).
|