Ciao Preprocessor (integrated Alpha version)
| This is an alpha distribution, meant only for testing. Please do let us
| know at ciaopp-bugclip.dia.fi.upm.es any problems you may have.
{Reading /tmp/tmpGS7DTY/snake.pl
}
{loaded in 3416.214 msec.}
{preprocessed for plai in 4.001 msec.}
{analyzed by plai using det with local-control off in 28.001 msec.}
{written file /tmp/tmpGS7DTY/snake_det_co.pl}
:- module(_1,[test_snake/3],[assertions]).
:- entry test_snake(A,B,C)
: ( ground(A), ground(B), ground(C) ).
:- true pred test_snake(A,B,C)
: ( ground([A,B,C]), gnd(A), gnd(B), gnd(C) )
=> ( ground([A,B,C]), rt27(A), rt6(B), rt6(C) )
+ ( is_det, mut_exclusive ).
test_snake(Pattern,C,R) :-
s2l(C,Cols),
s2l(R,Rows),
snake(Pattern,Cols,Rows).
:- true pred s2l(_1,_2)
: ( native_props:mshare([[_2]]), var(_2), ground([_1]), gnd(_1), term(_2) )
=> ( native_props:mshare([[_2]]), ground([_1]), rt6(_1), rt8(_2) )
+ ( is_det, mut_exclusive ).
s2l(0,[]).
s2l(s(X),[_1|Y]) :-
s2l(X,Y).
:- true pred snake(Pattern,Cols,Rows)
: ( native_props:mshare([[Cols],[Rows]]), ground([Pattern]), gnd(Pattern), rt8(Cols), rt8(Rows) )
=> ( native_props:mshare([[Cols],[Rows]]), ground([Pattern]), rt27(Pattern), rt8(Cols), rt47(Rows) )
+ ( is_det, mut_exclusive ).
snake(Pattern,Cols,Rows) :-
infinite_snake(Pattern,InfSnake,InfSnake),
produce_snake(Rows,Cols,InfSnake,Snake),
coil_it(Snake,odd).
:- true pred infinite_snake(_1,S,S)
: ( native_props:mshare([[S]]), var(S), ground([_1]), gnd(_1), term(S) )
=> ( native_props:mshare([[S]]), ground([_1]), rt27(_1), term(S) )
+ ( is_det, mut_exclusive ).
:- true pred infinite_snake(_1,S,_2)
: ( native_props:mshare([[S,_2]]), var(S), ground([_1]), gnd(_1), term(S), term(_2) )
=> ( native_props:mshare([[S,_2]]), ground([_1]), rt22(_1), term(S), term(_2) )
+ ( is_det, mut_exclusive ).
:- true pred infinite_snake(_1,S,_2)
: ( native_props:mshare([[S,_2]]), ground([_1]), rt12(_1), term(S), term(_2) )
=> ( native_props:mshare([[S,_2]]), ground([_1]), rt17(_1), term(S), term(_2) )
+ ( is_det, mut_exclusive ).
infinite_snake([],S,S).
infinite_snake([A|R],[A|T],S) :-
infinite_snake(R,T,S).
:- true pred produce_snake(_3,_1,_2,_4)
: ( native_props:mshare([[_3],[_1],[_2],[_4]]), var(_4), rt8(_3), rt8(_1), term(_2), term(_4) )
=> ( native_props:mshare([[_3],[_1],[_2],[_2,_4]]), rt47(_3), rt8(_1), term(_2), rt49(_4) )
+ ( is_det, mut_exclusive ).
produce_snake([],_1,_2,[]).
produce_snake([_1|Rows],Cols,InfSnake,[Part|Tail]) :-
part_of_snake(Cols,InfSnake,NewInfSnake,Part),
produce_snake(Rows,Cols,NewInfSnake,Tail).
:- true pred part_of_snake(_1,RestSnake,_2,_3)
: ( native_props:mshare([[_1],[RestSnake],[_2],[_3]]), var(_2), var(_3), rt8(_1), term(RestSnake), term(_2), term(_3) )
=> ( native_props:mshare([[_1],[RestSnake,_2],[RestSnake,_2,_3],[RestSnake,_3]]), rt39(_1), term(RestSnake), term(_2), rt41(_3) )
+ ( is_det, mut_exclusive ).
part_of_snake([],RestSnake,RestSnake,[]).
part_of_snake([_1|R],[Ring|Rings],RestSnake,[Ring|RestRings]) :-
part_of_snake(R,Rings,RestSnake,RestRings).
:- true pred coil_it(_1,even)
: ( native_props:mshare([[_1]]), rt50(_1) )
=> ( native_props:mshare([[_1]]), rt94(_1) )
+ ( is_det, mut_exclusive ).
:- true pred coil_it(_1,odd)
: ( native_props:mshare([[_1]]), rt49(_1) )
=> ( native_props:mshare([[_1]]), rt100(_1) )
+ ( is_det, mut_exclusive ).
coil_it([],_1).
coil_it([Line|Lines],odd) :-
coil_it(Lines,even).
coil_it([Line|Lines],even) :-
reverse2(Line,Line1),
coil_it(Lines,odd).
:- true pred reverse2(List,Reversed)
: ( native_props:mshare([[List],[Reversed]]), var(Reversed), rt51(List), term(Reversed) )
=> ( native_props:mshare([[List,Reversed]]), rt87(List), rt89(Reversed) )
+ ( is_det, mut_exclusive ).
reverse2(List,Reversed) :-
reverse(List,[],Reversed).
:- true pred reverse(_1,[],Reversed)
: ( native_props:mshare([[_1],[Reversed]]), var(Reversed), rt51(_1), term(Reversed) )
=> ( native_props:mshare([[_1,Reversed]]), rt87(_1), rt89(Reversed) )
+ ( is_det, mut_exclusive ).
:- true pred reverse(_1,[_2|_3],Reversed)
: ( native_props:mshare([[_1],[_1,_2],[Reversed],[_2]]), var(Reversed), ground([_3]), rt52(_1), term(Reversed), term(_2), rt59(_3) )
=> ( native_props:mshare([[_1,Reversed],[_1,Reversed,_2],[Reversed,_2]]), ground([_3]), rt82(_1), rt79(Reversed), term(_2), rt78(_3) )
+ ( is_det, mut_exclusive ).
:- true pred reverse(_1,[_2|_3],Reversed)
: ( native_props:mshare([[_1],[_1,_2],[_1,_2,_3],[_1,_3],[Reversed],[_2],[_2,_3],[_3]]), var(Reversed), rt52(_1), term(Reversed), term(_2), rt64(_3) )
=> ( native_props:mshare([[_1,Reversed],[_1,Reversed,_2],[_1,Reversed,_2,_3],[_1,Reversed,_3],[Reversed,_2],[Reversed,_2,_3],[Reversed,_3]]), rt74(_1), rt66(Reversed), term(_2), rt73(_3) )
+ ( is_det, mut_exclusive ).
reverse([],Reversed,Reversed).
reverse([Head|Tail],SoFar,Reversed) :-
reverse(Tail,[Head|SoFar],Reversed).
:- regtype rt50/1.
rt50([]).
rt50([A|B]) :-
rt51(A),
rt50(B).
:- regtype rt94/1.
rt94([]).
rt94([A|B]) :-
rt96(A),
rt95(B).
:- regtype rt29/1.
rt29([]).
rt29([A|B]) :-
gnd(A),
rt29(B).
:- regtype rt28/1.
rt28([]).
rt28([A|B]) :-
gnd(A),
rt29(B).
:- regtype rt27/1.
rt27([]).
rt27([A|B]) :-
gnd(A),
rt28(B).
:- regtype rt7/1.
rt7(0).
rt7(s(A)) :-
rt7(A).
:- regtype rt6/1.
rt6(0).
rt6(s(A)) :-
rt7(A).
:- regtype rt9/1.
rt9([]).
rt9([A|B]) :-
term(A),
rt9(B).
:- regtype rt8/1.
rt8([]).
rt8([A|B]) :-
term(A),
rt9(B).
:- regtype rt48/1.
rt48([]).
rt48([A|B]) :-
term(A),
rt48(B).
:- regtype rt47/1.
rt47([]).
rt47([A|B]) :-
term(A),
rt48(B).
:- regtype rt49/1.
rt49([]).
rt49([A|B]) :-
rt51(A),
rt50(B).
:- regtype rt103/1.
rt103([]).
rt103([A|B]) :-
term(A),
rt52(B).
:- regtype rt102/1.
rt102([]).
rt102([A|B]) :-
term(A),
rt103(B).
:- regtype rt97/1.
rt97([]).
rt97([A|B]) :-
term(A),
rt97(B).
:- regtype rt96/1.
rt96([]).
rt96([A|B]) :-
term(A),
rt97(B).
:- regtype rt95/1.
rt95([]).
rt95([A|B]) :-
rt96(A),
rt95(B).
:- regtype rt101/1.
rt101([]).
rt101([A|B]) :-
rt96(A),
rt95(B).
:- regtype rt100/1.
rt100([]).
rt100([A|B]) :-
rt102(A),
rt101(B).
:- regtype rt51/1.
rt51([]).
rt51([A|B]) :-
term(A),
rt52(B).
:- regtype rt88/1.
rt88([]).
rt88([A|B]) :-
term(A),
rt88(B).
:- regtype rt87/1.
rt87([]).
rt87([A|B]) :-
term(A),
rt88(B).
:- regtype rt91/1.
rt91([]).
rt91([A|B]) :-
term(A),
rt91(B).
:- regtype rt90/1.
rt90([]).
rt90([A|B]) :-
term(A),
rt91(B).
:- regtype rt89/1.
rt89([]).
rt89([A|B]) :-
term(A),
rt90(B).
:- regtype rt52/1.
rt52([]).
rt52([A|B]) :-
term(A),
rt52(B).
:- regtype rt59/1.
rt59([]).
:- regtype rt83/1.
rt83([]).
rt83([A|B]) :-
term(A),
rt83(B).
:- regtype rt82/1.
rt82([]).
rt82([A|B]) :-
term(A),
rt83(B).
:- regtype rt81/1.
rt81([]).
rt81([A|B]) :-
term(A),
rt81(B).
:- regtype rt80/1.
rt80([]).
rt80([A|B]) :-
term(A),
rt81(B).
:- regtype rt79/1.
rt79([A|B]) :-
term(A),
rt80(B).
:- regtype rt78/1.
rt78([]).
rt78([A|B]) :-
term(A),
rt78(B).
:- regtype rt65/1.
rt65([]).
rt65([A|B]) :-
term(A),
rt65(B).
:- regtype rt64/1.
rt64([]).
rt64([A|B]) :-
term(A),
rt65(B).
:- regtype rt75/1.
rt75([]).
rt75([A|B]) :-
term(A),
rt75(B).
:- regtype rt74/1.
rt74([]).
rt74([A|B]) :-
term(A),
rt75(B).
:- regtype rt66/1.
rt66([A|B]) :-
term(A),
rt64(B).
:- regtype rt73/1.
rt73([]).
rt73([A|B]) :-
term(A),
rt73(B).
:- regtype rt40/1.
rt40([]).
rt40([A|B]) :-
term(A),
rt40(B).
:- regtype rt39/1.
rt39([]).
rt39([A|B]) :-
term(A),
rt40(B).
:- regtype rt42/1.
rt42([]).
rt42([A|B]) :-
term(A),
rt42(B).
:- regtype rt41/1.
rt41([]).
rt41([A|B]) :-
term(A),
rt42(B).
:- regtype rt23/1.
rt23([]).
rt23([A|B]) :-
gnd(A),
rt23(B).
:- regtype rt22/1.
rt22([]).
rt22([A|B]) :-
gnd(A),
rt23(B).
:- regtype rt12/1.
rt12(A) :-
gnd(A).
:- regtype rt18/1.
rt18([]).
rt18([A|B]) :-
gnd(A),
rt18(B).
:- regtype rt17/1.
rt17([]).
rt17([A|B]) :-
gnd(A),
rt18(B).