maxTime(3). reactive_rule([happens(sort(X), T1, T2)], [quicksort(X, Y), happens(sorted(Y),T2, T3)]). observe([sort([2,1,4,3])], 2). quicksort([X|Xs],Ys) :- partition(Xs,X,Left,Right), quicksort(Left,Ls), quicksort(Right,Rs), myappend(Ls,[X|Rs],Ys). quicksort([],[]). partition([X|Xs],Y,[X|Ls],Rs) :- X =< Y, partition(Xs,Y,Ls,Rs). partition([X|Xs],Y,Ls,[X|Rs]) :- X > Y, partition(Xs,Y,Ls,Rs). partition([],Y,[],[]). action(sorted(_)). action(sort(_)). myappend([],L,L). myappend([X|L1],L2,[X|L3]) :- myappend(L1,L2,L3).