/* UTILITIES */ /* """"""""" */ printstring([]):-!. printstring([H|T]):-put(H),printstring(T). read_in([W|Ws]):-get0(C),readword(C,W,C1),restsent(W,C1,Ws). restsent(W,_,[]):-lastword(W),!. restsent(W,C,[W1|Ws]):-readword(C,W1,C1),restsent(W1,C1,Ws). readword(C,W,C1):-singlec(C),!,name(W,[C]),get0(C1). readword(C,W,C2):-in_word(C,NewC),!,get0(C1),restword(C1,Cs,C2),name(W,[NewC|Cs]). readword(C,W,C2):-get0(C1),readword(C1,W,C2). restword(C,[NewC|Cs],C2):-in_word(C,NewC),!,get0(C1),restword(C1,Cs,C2). restword(C,[],C). singlec(44). singlec(59). singlec(58). singlec(63). singlec(33). singlec(46). in_word(C,C):-C > 96,C < 123. in_word(C,L):-C > 64,C < 91,L is C+32. in_word(C,C):-C > 47,C < 58. in_word(39,39). in_word(45,45). lastword('.'). lastword('!'). lastword('?'). newline(0):-!. newline(X):-nl,Z is X-1,newline(Z). line(80):-!. line(X):-put("="),Y is X+1,line(Y). member(X,[X|_]). member(X,[_|Y]):-member(X,Y). last_element([El|[]],El):-!. last_element([_|Tail],El):-last_element(Tail,El). append([],L,L). append([X|L1],L2,[X|L3]):-append(L1,L2,L3). details(Name,Sa,Sc1,Sc2):- X=..[Name,Sa,Sc1,Sc2], call(name(X)). num(1). num(X):-num(Y), X is Y+1. between(Upper,Upper,Upper):-!. between(Lower,Upper,Lower):- Lower