%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Programma per il calcolo del massimo di una sequenza
% di numeri interi terminata da un numero negativo. 
% (richiede predicato 'leggi_lista_int')
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% calcola_max(X,Y,Max): vero se Max e' il maggiore 
%%% tra X e Y 

calcola_max(X,Y,Y) :-
    X =< Y.
calcola_max(X,Y,X) :-
    X > Y. 

%%% trova_max(L,MaxAtt,MaxFin): vero se MaxFin e' il maggiore
%%% tra MaxAtt e il massimo in L

trova_max([],MaxAttuale,MaxAttuale).
trova_max([X|R],MaxAttuale,MaxFinale) :-
    calcola_max(X,MaxAttuale,MaxNuovo),
    trova_max(R,MaxNuovo,MaxFinale).

%%% Interfaccia utente

start :-
    leggi_lista_int(L),
    trova_max(L,0,Max),
    write('Il max e'' '), write(Max).   