Elementary cellular automaton: Difference between revisions
Content added Content deleted
m (updated to use generality) |
|||
Line 1,542: | Line 1,542: | ||
=={{header|Prolog}}== |
=={{header|Prolog}}== |
||
<lang prolog>play :- |
<lang prolog>play :- initial(I), do_auto(50, I). |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
maplist(writ, I), nl, |
maplist(writ, I), nl, |
||
apply_rules(I, Next), |
apply_rules(I, Next), |
||
succ(N1, N), |
succ(N1, N), |
||
do_auto(N1, Next). |
|||
r(0,0,0,0). |
r(0,0,0,0). |
||
Line 1,560: | Line 1,562: | ||
r(1,1,1,0). |
r(1,1,1,0). |
||
apply_rules( |
apply_rules(In, Out) :- |
||
apply1st(In, First), |
|||
[A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1]) :- |
|||
Out = [First|_], |
|||
apply(In, First, First, Out). |
|||
r(S,A,B,A1), r(A,B,C,B1), r(B,C,D,C1), r(C,D,E,D1), r(D,E,F,E1), |
|||
r(E,F,G,F1), r(F,G,H,G1), r(G,H,I,H1), r(H,I,J,I1), r(I,J,K,J1), |
|||
r(J,K,L,K1), r(K,L,M,L1), r(L,M,N,M1), r(M,N,O,N1), r(N,O,P,O1), |
|||
r(O,P,Q,P1), r(P,Q,R,Q1), r(Q,R,S,R1), r(R,S,A,S1). |
|||
⚫ | |||
⚫ | |||
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]). |
|||
⚫ | |||
⚫ | |||
=={{header|Python}}== |
=={{header|Python}}== |