// always keeps a dynamically updated list of the n most probable // results // not synchronized srecord noeq PSCollectMostProbable( int maxResults, IVF1> action) implements IF0>> { new ProbabilisticScheduler ps; new TreeSetWithDuplicates> results; bool verbose; *(int *maxResults, IVF2> action) { this.action = out -> action.get(ps, out); } void add(WithProbability result) { if (result == null) ret; results.add(result); truncateTreeSetWithDuplicates(results, maxResults); } selfType run() { action.get(result -> add(WithProbability(ps.currentProbability(), result)); this; } selfType verbose(bool verbose) { this.verbose = verbose; this; } // results sorted by probability. instant public Set> results aka get() { ret results; } }