static A lowestAccordingTo(Collection l, IF1 scoreFunction) {
ret lowestAccordingTo(l, (O) scoreFunction);
}
static A lowestAccordingTo(Collection l, O scoreFunction) {
new Lowest lowest;
for (A a : l)
lowest.put(a, toDouble(callF(scoreFunction, a)));
ret lowest.get();
}