% mvlpl01.pl
%
% ******************************************************************

% ## 1.0  Gestion des compteurs

% ******************************************************************

:-dynamic(compt/2).

% new_compt(C)
%    Creation d'un nouveau compteur "C" s'il n'existe pas
%    la valeur initiale est 0

new_compt(C) :-
    compt(C,_),
    affiche("Le compteur "),
    affiche(C),
    affiche(" existe déjà."),
    nl.
new_compt(C) :-
    assert(compt(C,0)).

% init_compt(C,V)
%    Initialise le compteur "C" avec la valeur "V"

init_compt(C,V):-
    compt(C,_),
    err_compt(C),
    assert(compt(C,V)),!.
init_compt(C,V):-
    assert(compt(C,V)).

% err_compt(C)
%   Detruit le compteur "C"

err_compt(C) :-
    retract(compt(C,_)).

% inc_compt(C)
%    incremente le compteur "C" de 1

inc_compt(C) :-
    compt(C,V),
    V1 is V + 1,
    retract(compt(N,V)),
    assert(compt(N,V1)).

% dec_compt(C)
%    decremente le compteur "C" de 1

dec_compt(C) :-
    compt(C,V),
    V1 is V - 1,
    retract(compt(C,V)),
    assert(compt(C,V1)).

% raz_compt(C)
%    remise a zero du compteur "C"

raz_compt(C) :-
    retract(compt(C,_)),
    assert(compt(C,0)).

% err_all_compt
%    Detruit tous les compteurs

err_all_compt :-
    retract(compt(_,_)),
    fail.
err_all_compt.

%%% ******************************************************** FIN DE MVLPL01