/** 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(Data1, Rules) :- findrules2(Data1, [], Rules). findrules2(_Data,Rules,Rules). findrules2(Data1, Rules1, Rules2) :- Data1 = [Data2 | Data3], findrule(Data2,Rule), append(Rules1, [Rule], Rules3), findrules(Data3, Rules3, Rules2). findrule(Data, Rule) :- Data = [Identifier, Frames], findpositions1(Frames,[],Positions), findparticles1(Positions,Particles), findrule(Positions,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([],Positions,Positions). findpositions1(Frames1,Positions1,Positions2) :- Frames1 = [Frame | Frames2], Frame = [Time, State], findpositions2(State, 0, [], Positions3), Chart = [Time, Positions3], append(Positions1, [Chart], Positions4), findpositions1(Frames2,Positions4,Positions2). findpositions2([],_Position,Positions,Positions). findpositions2(State,Position1,Positions1,Positions2) :- State = [Item | Items], storechoice(Item, Position1,Positions1,Positions3), Position2 is Position1 + 1, findpositions2(Items,Position2,Positions3,Positions2). storechoice('',_Position,Positions,Positions) :- !. storechoice(Item1,Position,Positions1,Positions2) :- Item2 = [Item1, Position], append(Positions1,[Item2],Positions2). findparticles1(Positions1,Particles) :- 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