rendered paste bodySICStus 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<C ->
access(x, D, A),
update(u, D, A, E),
access(u, F, E),
access(y, G, E),
( F<G ->
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<B ->
( A<B ->
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<I ->
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<H ->
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<H ->
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<B ->
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<E ->
F is C*B,
'cs.assnx2'(E, B, F, D)
; D=C
).
true ?
yes