/* Read a sentence */ :- mode initread(-). :- mode readrest(+,-). :- mode word(-,?,?). :- mode words(-,?,?). :- mode alphanum(+,-). :- mode alphanums(-,?,?). :- mode digits(-,?,?). :- mode digit(+). :- mode lc(+,-). :- module(readin,[read_in(1)]). /* Read sentence */ read_in(P):-initread(L),words(P,L,[]),!. initread([K1,K2|U]):-get(K1),get0(K2),readrest(K2,U). readrest(46,[]):-!. readrest(63,[]):-!. readrest(33,[]):-!. readrest(K,[K1|U]):-K=<32,!,get(K1),readrest(K1,U). readrest(K1,[K2|U]):-get0(K2),readrest(K2,U). words([V|U]) --> word(V),!,blanks,words(U). words([]) --> []. word(U1) --> [K],Elc(K,K1)L,!,alphanums(U2),Ename(U1,[K1|U2])L. word(nb(N)) --> [K],Edigit(K)L,!,digits(U),Ename(N,[K|U])L. word(V) --> [K],Ename(V,[K])L. alphanums([K1|U]) --> [K],Ealphanum(K,K1)L,!,alphanums(U). alphanums([]) --> []. alphanum(K,K1):-lc(K,K1). alphanum(K,K):-digit(K). digits([K|U]) --> [K],Edigit(K)L,!,digits(U). digits([]) --> []. blanks--> [K],EK=<32L,!,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.