readin(Words) :- get0(Char), readin(Char, Words). % Newlines end the input readin(10, []) :- !. % Spaces are ignored readin(32, Words) :- !, get0(Char), readin(Char, Words). % Everything else is collected readin(Char, [Word|Words]) :- readchars(Char, Chars, Next), name(Word, Chars), readin(Next, Words). % Space and newline end a word. readchars(32, [], 32) :- !. readchars(10, [], 10) :- !. % All other chars are added to the list. readchars(Char, [Char|Chars], Last) :- get0(Next), readchars(Next, Chars, Last).