leggi_lista_int(L) :-
       write('Dai un numero (negativo per smettere)'), nl,       read(X),
       leggi_lista_int_cont(X,L).

leggi_lista_int_cont(X,[]) :-
       X < 0.
leggi_lista_int_cont(X,L) :-
       X >= 0,
       L = [X|R],
       leggi_lista_int(R).


leggi_lista_car(L) :-
       get0(C),
       leggi_lista_car_cont(C,L).

leggi_lista_car_cont(C,[]) :-
       C == 10.
leggi_lista_car_cont(C,L) :-
       C \== 10,
       L = [C|R],
       leggi_lista_car(R).

% Goal d'esempio
%
% ?- leggi_lista_int(L).
% |: 3.
% |: 5.
% |: 1.
% |: 4.
% |: -1.
% L = [3, 5, 1, 4]
%
% ?- leggi_lista_car(L).
% |: ciao
% L = [99, 105, 97, 111] 