% $Id: read-integer.pl,v 1.1 2014/09/18 11:21:53 machan Exp $
% 元ネタ：【論理】Prolog【初心者】
%    http://p...content-available-to-author-only...h.net/test/read.cgi/tech/1289016056/751-756


read_integers(Xs) :- read_terms(Ts), select_integer(Ts, Xs).


read_terms(Xs) :- read(X), read_terms_1(X, Xs).

read_terms_1(X, [])     :- X =  end_of_file.
read_terms_1(X, [X|Xs]) :- X \= end_of_file, read(Y), read_terms_1(Y, Xs).


select_integer([],     []).
select_integer([X|Xs], [X|Ys]) :- integer(X),   select_integer(Xs, Ys).
select_integer([X|Xs], Ys)     :- \+integer(X), select_integer(Xs, Ys).



%%%%%%%% Example %%%%%%%%
%
%  ?- read_integers(L).
%  |: 1.
%  |: 2.
%  |: a.
%  |: 3.
%  |: (4, 5).
%  |: 6.
%  |: "7".
%  |: 8.
%  |: L = [1, 2, 3, 6, 8] ;
%  false.
%  
%  ?-