Prolog library: readin.pl
pereira at sri-unix.UUCP
pereira at sri-unix.UUCP
Mon Aug 15 16:03:16 AEST 1983
/* READIN.PL : Read in a sentence into a list of words
UTILITY
Lawrence
Updated: 30 march 81
*/
%%% Compile this module
%%% READIN requires no other modules
/* EXPORT */
:- public read_in/1.
/* MODES */
:- mode read_in(?).
:- mode initread(-).
:- mode readrest(+,-).
:- mode word(-,?,?).
:- mode words(-,?,?).
:- mode alphanum(+,-).
:- mode alphanums(-,?,?).
:- mode digits(-,?,?).
:- mode digit(+).
:- mode lc(+,-).
read_in(P):-initread(L),words(P,L,[]),!.
initread([K1,K2|U]):-get(K1),get0(K2),readrest(K2,U).
readrest(46,L) :- !, possiblythere(46,L).
readrest(63,L) :- !, possiblythere(63,L).
readrest(33,L) :- !, possiblythere(33,L).
readrest(K,[K1|U]):-K=<32,!,get(K1),readrest(K1,U).
readrest(K1,[K2|U]):-get0(K2),readrest(K2,U).
possiblythere(C,Rest)
:- repeat,
get0(Next),
Next =\= 32,
( Next =:= 31,
!,
Rest = [] ; Rest = [Next|More],
readrest(Next,More)
).
words([V|U]) --> word(V),!,blanks,words(U).
words([]) --> [].
word(U1) --> [K],{lc(K,K1)},!,alphanums(U2),{name(U1,[K1|U2])}.
word(N) --> [K],{digit(K)},!,digits(U),{name(N,[K|U])}.
word(V) --> [K],{name(V,[K])}.
alphanums([K1|U]) --> [K],{alphanum(K,K1)},!,alphanums(U).
alphanums([]) --> [].
alphanum(K,K1):-lc(K,K1).
alphanum(K,K):-digit(K).
digits([K|U]) --> [K],{digit(K)},!,digits(U).
digits([]) --> [].
blanks--> [K],{K=<32},!,blanks.
blanks --> [].
digit(K):-K>47,K<58.
lc(K,K1):-K>64,K<91,!,K1 is K\/8'40.
lc(K,K):-K>96,K<123.
More information about the Comp.sources.unix
mailing list