1%:-prolog_flag(compiling,_,profiledcode).
    2
    3%We seperate this to a call so we can cut without affecting the main algorithm
    4matchHappens(A,F,X, Plan) :- member( happens(A,F,X), Plan),!.	
    5
    6
    7sortPlan(Plan, SortedPlan) :- breakup(Plan,SortedPlan), 
    8
    9	% Cut required when generating multiple solutions to avoid
   10	% backtrack possible sorting paths
   11	!.
   12
   13breakup([ Plan, Ordering], CorrectlyOrderedPlan) :- 
   14	writeln('plan:'),writeNoln(Plan),
   15	writeln('orderings:'),writeNoln(Ordering),
   16	!,sortTimepoints(Plan,Ordering, BackwardsPlan, t, 0),!,
   17	
   18	%The plan will be backwards as it starts at t the goal timepoint
   19	reverse(BackwardsPlan, CorrectlyOrderedPlan).
   20
   21	
   22	
   23% Current only caters for totally ordered plans
   24% Add a forall statement when finding members
   25
   26%If the Before list is not empty then a node has been missed implying the plan is not totally ordered
   27
   28sortTimepoints(Plan, Ordering, [] , Timepoint, Accum):-
   29	length(Plan, PlanLength),
   30	Accum = PlanLength.
   31
   32sortTimepoints(Plan, Ordering, [ happens(A,F,X) | OrderPlan] , Timepoint, Accum):-
   33
   34	%we want to rematch here
   35	member( before(X, Timepoint), Ordering),
   36	
   37	%we never want to rematch here
   38	matchHappens(A,F,X,Plan),
   39		
   40	AccumFresh is Accum+1,
   41	
   42	sortTimepoints(Plan, Ordering, OrderPlan, X, AccumFresh).
   43	
   44	
   45	
   46% --------------Tests ----------------------
   47	
   48%test1_sortPlan(SortedPlan) :- sortPlan([[happens(createFormelemen(restrictedDrugs,radiobtn,[size=2]),t177,t177),happens(formEntry(form1,jw99),t32,t32),happens(edgeProgression(form2,formElement(test2,value)),t160,t160),happens(formSubmission(form2),t142,t142),happens(createFormelement(textboxform1,textbox,[multline,numlines(4)]),t123,t123),happens(formEntry(form2,jw99),t138,t138),happens(formInput(house),t34,t34),happens(formSubmission(form1),t35,t35),happens(edgeProgression(form1,formElement(correctDrugs,off)),t116,t116)],[before(t177,t142),before(t138,t177),before(t123,t35),before(t32,t123),before(t35,t116),before(t142,t160),before(t160,t),before(t138,t),before(t116,t138),before(t123,t34),before(t123,t35),before(t32,t123),before(t35,t116),before(t34,t35)]], SortedPlan).