/** Time to do the action Finds the rules for the relationships of a set of particles in a 1D space. findrules1( [[1,[[0,[a,'','','','',b]], [1,['',a,'','',b,'']], [2,['','',a,b,'','']], [2,['',a,'','',b,'']], [2,[a,'','','','',b]]]], [2,[[0,[a,'','',b,c,'']], [1,['',a,'',b,c,'']], [2,['','',a,b,c,'']], [3,['','',a,b,'',c]]]]], Rules). Rules = [[1,[1,0,-1,-1,0,1]],[2,[1,0,0,0,0,1]]] **/ findrules1(Charts1, Rules) :- findrules2(Charts1, [], Rules). findrules2(_Charts,Rules,Rules). findrules2(Charts1, Rules1, Rules2) :- Charts1 = [Chart2 | Charts2], findrule(Chart2,Rule), append(Rules1, [Rule], Rules3), findrules(Charts2, Rules3, Rules2). findrule(Chart1, Rule) :- Chart1 = [Identifier, Chart2], findgraph1(Chart2,[],Graph), findparticles1(Particles,Graph), findrule(Graph,Particles,Rule1). /** Velocities = find pos's find rel of pos's when v changes ()find half way point find v for first half, second half for each**/ Rule = [Identifier, Rule1]. findpositions1([],Graph,Graph). findpositions1(Chart1,Graph1,Graph2) :- Chart1 = [Chart2 | Charts], Chart2 = [Time, Chart3], findgraph2(Chart3, 0, [], Graph3), Graph = [Time, Graph3], append(Graph1, [Graph], Graph4), findpositions1(Charts,Graph4,Graph2). findgraph2([],_Chart,Graph,Graph). findgraph2(Chart1,Graph1,Graph2,Graph3) :- Chart1 = [Chart2 | Charts], storechoice(Chart2, Graph1,Graph2,Graph4), Graph5 is Graph1 + 1, findpositions2(Charts,Graph5,Graph4,Graph3). storechoice('',_Graph1,Graph2,Graph2) :- !. storechoice(Chart1,Graph1,Graph2,Graph3) :- Chart1 = [Chart2, Graph1], append(Graph2,[Chart1],Positions2). findparticles1(Particles,Graph1) :- Positions1 = [Chart | _Charts], Chart = [_Time, Positions2], findparticles2(Positions2,[],Particles). findparticles2([],Particles,Particles). findparticles2(Positions,Particles1,Particles2) :- Positions = [Item | Items], Item = [Particle, Position], append(Particles1, [Particle], Particles3), findparticles2(Items,Particles3,Particles2). findrule(Positions,Particles,Rule1) :- findvelocities1(Particles,Positions,[],Velocities), findvelocities1([],_Positions,Velocities,Velocities). findvelocities1(Particles,Positions,Velocities1,Velocities2) :- Particles1 = [Particle | Particles2], Positions = [Time | Pos findvelocities2(Particle,Positions,Velocities1,Velocities3), findvelocities1(Particles2,Positions,Velocities3,Velocities2). findvelocities2(_Particle,[],Velocities,Velocities). findvelocities2(Particle,Positions,Velocities1,Velocities2), %%find particles involved