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).