%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Programma per il calcolo del massimo di una sequenza
% di numeri interi terminata da un numero negativo
% letta da std input 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% maggiore2(X,Y,Max): vero se Max e' il maggiore 
%%% tra X e Y 

maggiore2(X,Y,Y) :-
    X =< Y.
maggiore2(X,Y,X) :-
    X > Y. 


%%% Interfaccia utente

start :-
    trova_max(0,Max),
    write('Il max e'' '), write(Max). 

trova_max(MaxAttuale,MaxFinale) :-
    write('Dai un numero (negativo per smettere)'), nl,
    read(X),
    trova_max_cont(X,MaxAttuale,MaxFinale).

trova_max_cont(X,MaxAttuale,MaxAttuale) :-
    X < 0.
trova_max_cont(X,MaxAttuale,MaxFinale) :-
    X >= 0,
    maggiore2(X,MaxAttuale,MaxNuovo),
    trova_max(MaxNuovo,MaxFinale).

