SICStus 3.9.0 (sparc-solaris-5.7): Tue Feb 12 17:06:38 MET 2002 Licensed to utdallas.edu Mixtus 0.3.6 | ?- pconsult('dcg3-tail.pl'). {consulting for mixtus: /home/002/m/mr/mrd033000/apl-hw4/dcg3-tail.pl} yes | ?- pe(gcd(A,B,C)). gcd(A, B, C) :- gcd1(A, B, C). % gcd1(A,B,C):-gcd(A,B,C) gcd1(A, B, C) :- newstore(D), update(x, A, D, E), update(y, B, E, F), 'c2sloopltconst+*101'(F, G), access(x, H, G), update(z, H, G, I), access(z, C, I). % 'c2sloopltconst+*101'(A,B):-c2s(loop(lt(const(10*0+0),var(y)),[assn(u,var(x)),if(not(lt(var(u),var(y))),[assn(u,sub(var(u),var(y)))],[]),assn(x,var(y)),assn(y,var(u))]),A,B) 'c2sloopltconst+*101'(A, B) :- access(y, C, A), ( 0 access(x, D, A), update(u, D, A, E), access(u, F, E), access(y, G, E), ( F H=E ; access(u, I, E), access(y, J, E), K is I-J, update(u, K, E, L), H=L ), access(y, M, H), update(x, M, H, N), access(u, O, N), update(y, O, N, P), 'c2sloopltconst+*101'(P, Q), B=Q ; B=A ). true ? yes | ?- pconsult('store2.pl'). {consulting for mixtus: /home/002/m/mr/mrd033000/apl-hw4/store2.pl} yes | ?- pe(gcd(A,B,C)). gcd(A, B, C) :- gcd1(A, B, C). % gcd1(A,B,C):-gcd(A,B,C) gcd1(A, B, C) :- ( 0 ( A D=store(A,0,0,A,B,0) ; D=store(E,0,0,A,B,0), E is A-B ), 'cs.assn1'(x, y, assn(y,var(u)), [loop(lt(const(10*0+0),var(y)),[assn(u,var(x)),if(not(lt(var(u),var(y))),[assn(u,sub(var(u),var(y)))],[]),assn(x,var(y)),assn(y,var(u))])], D, F) ; F=store(0,0,0,A,B,0) ), F=store(_,_,_,C,_,_). % 'cs.assn1'(x,y,assn(y,var(u)),[loop(lt(const(10*0+0),var(y)),[assn(u,var(x)),if(not(lt(var(u),var(y))),[assn(u,sub(var(u),var(y)))],[]),assn(x,var(y)),assn(y,var(u))])],A,B):-cs([assn(x,var(y)),assn(y,var(u)),loop(lt(const(10*0+0),var(y)),[assn(u,var(x)),if(not(lt(var(u),var(y))),[assn(u,sub(var(u),var(y)))],[]),assn(x,var(y)),assn(y,var(u))])],A,B) 'cs.assn1'(A, B, C, D, E, F) :- c2sassn1(A, B, E, G), c2s1(C, G, H), cs2(D, H, F). % c2sassn1(A,B,C,D):-c2s(assn(A,var(B)),C,D) c2sassn1(u, u, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). c2sassn1(v, u, store(A,_,B,C,D,E), store(A,A,B,C,D,E)). c2sassn1(w, u, store(A,B,_,C,D,E), store(A,B,A,C,D,E)). c2sassn1(x, u, store(A,B,C,_,D,E), store(A,B,C,A,D,E)). c2sassn1(y, u, store(A,B,C,D,_,E), store(A,B,C,D,A,E)). c2sassn1(z, u, store(A,B,C,D,E,_), store(A,B,C,D,E,A)). c2sassn1(u, v, store(_,A,B,C,D,E), store(A,A,B,C,D,E)). c2sassn1(v, v, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). c2sassn1(w, v, store(A,B,_,C,D,E), store(A,B,B,C,D,E)). c2sassn1(x, v, store(A,B,C,_,D,E), store(A,B,C,B,D,E)). c2sassn1(y, v, store(A,B,C,D,_,E), store(A,B,C,D,B,E)). c2sassn1(z, v, store(A,B,C,D,E,_), store(A,B,C,D,E,B)). c2sassn1(u, w, store(_,A,B,C,D,E), store(B,A,B,C,D,E)). c2sassn1(v, w, store(A,_,B,C,D,E), store(A,B,B,C,D,E)). c2sassn1(w, w, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). c2sassn1(x, w, store(A,B,C,_,D,E), store(A,B,C,C,D,E)). c2sassn1(y, w, store(A,B,C,D,_,E), store(A,B,C,D,C,E)). c2sassn1(z, w, store(A,B,C,D,E,_), store(A,B,C,D,E,C)). c2sassn1(u, x, store(_,A,B,C,D,E), store(C,A,B,C,D,E)). c2sassn1(v, x, store(A,_,B,C,D,E), store(A,C,B,C,D,E)). c2sassn1(w, x, store(A,B,_,C,D,E), store(A,B,C,C,D,E)). c2sassn1(x, x, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). c2sassn1(y, x, store(A,B,C,D,_,E), store(A,B,C,D,D,E)). c2sassn1(z, x, store(A,B,C,D,E,_), store(A,B,C,D,E,D)). c2sassn1(u, y, store(_,A,B,C,D,E), store(D,A,B,C,D,E)). c2sassn1(v, y, store(A,_,B,C,D,E), store(A,D,B,C,D,E)). c2sassn1(w, y, store(A,B,_,C,D,E), store(A,B,D,C,D,E)). c2sassn1(x, y, store(A,B,C,_,D,E), store(A,B,C,D,D,E)). c2sassn1(y, y, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). c2sassn1(z, y, store(A,B,C,D,E,_), store(A,B,C,D,E,E)). c2sassn1(u, z, store(_,A,B,C,D,E), store(E,A,B,C,D,E)). c2sassn1(v, z, store(A,_,B,C,D,E), store(A,E,B,C,D,E)). c2sassn1(w, z, store(A,B,_,C,D,E), store(A,B,E,C,D,E)). c2sassn1(x, z, store(A,B,C,_,D,E), store(A,B,C,E,D,E)). c2sassn1(y, z, store(A,B,C,D,_,E), store(A,B,C,D,E,E)). c2sassn1(z, z, store(A,B,C,D,E,F), store(A,B,C,D,E,F)). % c2s1(A,B,C):-c2s(A,B,C) c2s1(if(A,B,C), D, E) :- bs1(A, B, C, D, E). c2s1(loop(A,B), C, D) :- add12(B, A, B, E), bs1(A, E, C, D). c2s1(assn(A,B), C, D) :- es1(B, C, E, F), F=store(G,H,I,J,K,L), D=store(M,N,O,P,Q,R), ( A=u, M=E, N=H, O=I, P=J, Q=K, R=L ; A=v, M=G, N=E, O=I, P=J, Q=K, R=L ; A=w, M=G, N=H, O=E, P=J, Q=K, R=L ; A=x, M=G, N=H, O=I, P=E, Q=K, R=L ; A=y, M=G, N=H, O=I, P=J, Q=E, R=L ; A=z, M=G, N=H, O=I, P=J, Q=K, R=E ). % bs1(A,B,C,D,E):-bs(A,B,C,D,E) bs1(eq(A,B), C, D, E, F) :- es1(A, E, G, H), es1(B, H, I, J), ( G==I -> cs1(C, J, F) ; cs1(D, J, F) ). bs1(lt(A,B), C, D, E, F) :- es1(A, E, G, H), es1(B, H, I, J), ( G cs1(C, J, F) ; cs1(D, J, F) ). bs1(not(A), B, C, D, E) :- bs1(A, C, B, D, E). % es1(A,B,C,D):-es(A,C,B,D) es1(add(A,B), C, D, E) :- es1(A, C, F, G), es1(B, G, H, E), D is F+H. es1(sub(A,B), C, D, E) :- es1(A, C, F, G), es1(B, G, H, E), D is F-H. es1(mult(A,B), C, D, E) :- es1(A, C, F, G), es1(B, G, H, E), D is F*H. es1(assn(A,B), C, D, E) :- es1(B, C, F, G), G=store(H,I,J,K,L,M), E=store(N,O,P,Q,R,S), ( A=u, N=F, O=I, P=J, Q=K, R=L, S=M, D is F ; A=v, N=H, O=F, P=J, Q=K, R=L, S=M, D is F ; A=w, N=H, O=I, P=F, Q=K, R=L, S=M, D is F ; A=x, N=H, O=I, P=J, Q=F, R=L, S=M, D is F ; A=y, N=H, O=I, P=J, Q=K, R=F, S=M, D is F ; A=z, N=H, O=I, P=J, Q=K, R=L, S=F, D is F ). es1(var(u), store(A,B,C,D,E,F), A, store(A,B,C,D,E,F)). es1(var(v), store(A,B,C,D,E,F), B, store(A,B,C,D,E,F)). es1(var(w), store(A,B,C,D,E,F), C, store(A,B,C,D,E,F)). es1(var(x), store(A,B,C,D,E,F), D, store(A,B,C,D,E,F)). es1(var(y), store(A,B,C,D,E,F), E, store(A,B,C,D,E,F)). es1(var(z), store(A,B,C,D,E,F), F, store(A,B,C,D,E,F)). es1(const(A), B, C, B) :- C is A. % cs1(A,B,C):-cs(A,B,C) cs1([], A, A). cs1([A|B], C, D) :- c2s1(A, C, E), cs1(B, E, D). % add12(A,B,A,C):-add1(A,loop(B,A),C) add12([], A, B, [loop(A,B)]). add12([A|B], C, D, [A|E]) :- add12(B, C, D, E). % bs1(A,B,C,D):-bs(A,B,[],C,D) bs1(eq(A,B), C, D, E) :- es1(A, D, F, G), es1(B, G, H, I), ( F==H -> cs1(C, I, E) ; E=I ). bs1(lt(A,B), C, D, E) :- es1(A, D, F, G), es1(B, G, H, I), ( F cs1(C, I, E) ; E=I ). bs1(not(eq(A,B)), C, D, E) :- es1(A, D, F, G), es1(B, G, H, I), ( F==H -> E=I ; cs1(C, I, E) ). bs1(not(lt(A,B)), C, D, E) :- es1(A, D, F, G), es1(B, G, H, I), ( F E=I ; cs1(C, I, E) ). bs1(not(not(A)), B, C, D) :- bs1(A, B, C, D). % cs2(A,B,C):-cs(A,B,C) cs2([], A, A). cs2([A|B], C, D) :- c2s1(A, C, E), cs2(B, E, D). true ? n no | ?- pe(expt(A,B,C)). expt(A, B, C) :- expt1(A, B, C). % expt1(A,B,C):-expt(A,B,C) expt1(A, B, C) :- ( 0 D is A, 'cs.assnx2'(B, A, D, C) ; C=1 ). % 'cs.assnx2'(A,B,C,D):-cs([assn(x,sub(var(x),const(10*0+1))),loop(lt(const(10*0+0),var(x)),[assn(z,mult(var(z),var(y))),assn(x,sub(var(x),const(10*0+1)))])],store(0,0,1,A,B,C),store(E,F,G,H,I,D)) 'cs.assnx2'(A, B, C, D) :- E is A-1, ( 0 F is C*B, 'cs.assnx2'(E, B, F, D) ; D=C ). true ? yes