31 lines
713 B
Prolog
31 lines
713 B
Prolog
play :- initial(I), do_auto(50, I).
|
|
|
|
initial([0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]).
|
|
|
|
do_auto(0, _) :- !.
|
|
do_auto(N, I) :-
|
|
maplist(writ, I), nl,
|
|
apply_rules(I, Next),
|
|
succ(N1, N),
|
|
do_auto(N1, Next).
|
|
|
|
r(0,0,0,0).
|
|
r(0,0,1,1).
|
|
r(0,1,0,0).
|
|
r(0,1,1,1).
|
|
r(1,0,0,1).
|
|
r(1,0,1,0).
|
|
r(1,1,0,1).
|
|
r(1,1,1,0).
|
|
|
|
apply_rules(In, Out) :-
|
|
apply1st(In, First),
|
|
Out = [First|_],
|
|
apply(In, First, First, Out).
|
|
|
|
apply1st([A,B|T], A1) :- last([A,B|T], Last), r(Last,A,B,A1).
|
|
apply([A,B], Prev, First, [Prev, This]) :- r(A,B,First,This).
|
|
apply([A,B,C|T], Prev, First, [Prev,This|Rest]) :- r(A,B,C,This), apply([B,C|T], This, First, [This|Rest]).
|
|
|
|
writ(0) :- write('.').
|
|
writ(1) :- write(1).
|