/***************************************************************************/ /* SUPPORT PREDICATES */ /* Facts extractor from something&fact1&fact2... */ extrf(X,XX):- E_FACT=38, extractfg(E_FACT,X,XX), ground(XX), % name(XXC,XX),write('* LAST FACT: '),write(XXC),nl, !. extrf(X,XX). /* Goals extractor from something$goal1$goal2... */ extrg(X,XX):- E_GOAL=36, extractfg(E_GOAL,X,XX), ground(XX), % name(XXC,XX),write('* LAST GOAL: '),write(XXC),nl, !. extrg(X,XX). /* Facts from... something~fact~fact... */ extra(X,XX):- E_ALT1=126, extractfg(E_ALT1,X,XX), ground(XX), % name(XXC,XX),write('* LAST ALT1: '),write(XXC),nl, !. extra(X,XX). /* Facts from... something`fact`fact... */ extrfa(X,XX):- E_ALT2=96, extractfg(E_ALT2,X,XX), ground(XX), % name(XXC,XX),write('* LAST ALT1: '),write(XXC),nl, !. extrfa(X,XX). %extract fact/goal X1 from the answer X with the rest XX (fact=35, goal=36) extractfg(E,X,XX):- search(0,E,X,N1), % write('First search: '),write(N1),nl, remove_first(N1,X,X1), name(X1C,X1), % write('First rezult: '),write(X1C),nl, nextextractfg(E,X1,XX). extractfg(E,X,XX). nextextractfg(E,X1,XX):- name(X1C,X1), % write('X1...'),write(X1C),nl, search(0,E,X1,N), length(X1,NX1), (N=NX1, name(X1C,X1), filter(E,X1), % write('We need last: '),write(X1C),nl, XX is X1, ! ; % write('Second search: '),write(N),nl, length(X1,NN1), NL is NN1-N+1, remove_last(NL,X1,XL), /*XL va fi ce ne trebuie!!!*/ name(XLC,XL), filter(E,XL), % write('* PARTIAL: '),write(XLC),nl, remove_first(N,X1,XF), name(XFC,XF), % write('* REST: '),write(XFC),nl, nextextractfg(E,XF,XX) ). nextextractfg(E,X1,XX). filter(E,X):- % write('Filter...'),nl, length(X,N), NF is N-1, % write('N='),write(N),nl, remove_first(NF,X,X1), (member(34,X1), remove_last(1,X,X0) %, % write('IF 34, X0='),write(X0),nl ; not(member(34,X1)), % write('Alors...'),nl, X0 is X %, % write('IF NOT 34, X0='),write(X0),nl ), remove_first(5,X0,X2), remove_last(1,X2,X3), term_chars(XX3,X3), assertfg(E,XX3). filter(E,X). assertfg(38,Q):- not(fact(Q)), write('***F-MOO***>>> '), af(Q), fail. assertfg(36,Q):- not(goal(Q)), write('***G-MOO***>>> '), ag(Q), fail. assertfg(126,Q):- not(fact(Q)), write('***F-AGENT***>>> '), af(Q), fail. assertfg(96,Q):- not(fact(Q)), write('***F-FAGMOO***>>> '), af(Q), fail. assertfg(_,Q):- fail. search(0,C,[],0):-fail. search(1,C,[],0). search(1,C,[C|T],1). search(0,C,[C|T],1):- !. search(_,C,[H|T],N):-search(_,C,T,M),N is M+1. remove_first(0,N,N):-fail. remove_first(1,[H|T],T). remove_first(Nr,[X|Y],Z):- N is Nr-1, remove_first(N,Y,Z). remove_last(N,T,R):-reverse(T,F),remove_first(N,F,Q),reverse(Q,R). reverse(Xs,Zs):-rev(Xs,[],Zs). rev([],Ys,Ys). rev([X|Xs],Ys,Zs):-rev(Xs,[X|Ys],Zs). card([],0). card([A|B],N):-M is N+1, card(B,M). writeln([]). writeln([A|Xs]):- flush,write(A),member(X,Xs),write(' '),write(X),fail ; write('.'),nl,flush. w(Sir):- write(' '),nl, term_chars(Ss,Sir), write(Ss),nl, % sleep(2). %_cc: sleep(3). sw(Socket,Message,Time):- sock_writeln(Socket,Message), sleep(Time). convert(Seconds, Minutes):- // (Seconds,60,Minutes). %X1-sir, X2-atom, XX-sir appenda(X1,X2,XX):- term_chars(X2,XX2), append(X1,XX2,XX). filterunderscore1(X,Q):- length(X,NX), search(0,95,X,N), not(N=NX), remove_first(N,X,X2), N2 is NX-N+1, remove_last(N2,X,X1), append(X1," ",XI), append(XI,X2,Q), !. filterunderscore1(X,Q):- Q is X.