%%% Le uma serie de numeros e reporta sua soma.
%%% A serie termina no primeiro negativo, excluindo-o.

cabecalho :-
   write('Soma de numeros; para em negativo'), nl. 

%%% soma(S) coloca em S a soma dos proximos numeros lidos,
%%% até chegar algum numero negativo

soma(S) :-
    leTermo(A),
    A >= 0,
    soma(S1),
    S is S1 + A.
soma(0).

leTermo(X) :-
    write('Entre com um numero, seguido de ".": '),
    read(X).

reporta(S) :-
    write('Soma = '), write(S), nl.

%%% programa principal

:- cabecalho, soma(S), reporta(S).
