All pastes #447593 Raw Edit

Something

public text v1 · immutable
·published 2007-04-19 04:52 UTC
rendered paste body
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<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