1:- module(canny_situations_debugging, [print_situation_history_lengths/0]).    2
    3:- use_module(situations).    4
    5listen :-
    6    unlisten,
    7    debug(situation),
    8    listen(situation(A), situation([A])),
    9    listen(situation(A, B), situation([A, B])),
   10    listen(situation(A, B, C), situation([A, B, C])).
   11
   12unlisten :-
   13    context_module(M),
   14    unlisten(M),
   15    nodebug(situation).
   16
   17situation([Situation, was(Was, _)]) :-
   18    !,
   19    debug(situation, 'situation ~q WAS ~q', [Situation, Was]).
   20situation([Situation, was(Was, _), now(Now, _)]) :-
   21    !,
   22    debug(situation, 'situation ~q WAS ~q NOW ~q', [Situation, Was, Now]).
   23situation([Situation, now(Now, _)]) :-
   24    debug(situation, 'situation ~q NOW ~q', [Situation, Now]).
   25
   26:- initialization listen.   27
   28:- use_module(library(print/table)).
 print_situation_history_lengths is det
Finds all situations. Samples their histories and measures the history lengths. Uses = when sorting; do not remove duplicates. Prints a table of situations by their history length, longest history comes first. Filters out single-element histories for the sake of noise minimisation.
   38print_situation_history_lengths :-
   39    findall((Module:Situation)-Length,
   40            (   situation_property(Module:Situation, history(History)),
   41                length(History, Length)
   42            ), Situations),
   43    convlist([First-Second, First-Second]>>(Second > 1), Situations, Filtered),
   44    sort(2, @>=, Filtered, Sorted),
   45    print_table(member(_-_, Sorted))