%Prolog example developed by Dr. Klerer, CSUSB test :- exp([a,s,i,n],_,0). t(X) :- exp(X,_,0). exp(X) :- size(X,Y), exp(X,Y,0). exp(Text,Size,0) :- v(Text,Size). exp(Text,Size,Count) :- S is Size-Count, v(T1,S), append(T1,T2,Text), exp(T2,Count,0). exp(Text,Size,Count) :- C is Count+1, C < Size, exp(Text,Size,C). e1(X,L) :- size(X,Y), exp1(X,Y,0,L). exp1(Text,Size,0,Text) :- v(Text,Size), !. exp1(Text,Size,Count,[T1,L]) :- S is Size-Count, v(T1,S), append(T1,T2,Text), exp1(T2,Count,0,L), !. exp1(Text,Size,Count,L) :- C is Count+1, C < Size, exp1(Text,Size,C,L). e(X,L) :- size(X,Y), e(X,Y,L). e(Text,Size,Text) :- v(Text,Size). e(Text,Size,[T1,L]) :-append(T1,T2,Text), v(T1,Size), e(T2,L). e(Text,Size,L) :- S is Size-1, S > 0, e(Text,S,L). append([],L,L). append([X; L1],L2,[X; L3]) :- append(L1,L2,L3). v(Word,Size) :- w(Word), size(Word,Size). ex(T) :- va(T), !. ex(T) :- va(T1), ex(T2), append(T1,T2,T). ex(T,T) :- va(T). ex(T,[T1; L]) :- append(T1,T2,T), va(T1), ex(T2,L). va(Word) :- va(Word,10). va(W,C) :- v(W,C). va(W,C) :- C1 is C-1, C1 > 0, va(W,C1). size([],0). size([X; Y],Z) :- size(Y,Q), Z is Q+1. w([a]). w([s,i,n]). w([x]). w([y]). w([x,y]). :- write('Loaded'), nl.