Merge and aggregate datasets: Difference between revisions
→{{header|Mercury}}: simplify bag_max
(Add Mercury task) |
(→{{header|Mercury}}: simplify bag_max) |
||
Line 707:
:- pred bag_sum(pred(float)::(pred(out) is nondet), float::out) is det.
:- pred bag_avg(pred(float)::(pred(out) is nondet), float::out) is det.
:- pred
bag_count(Predicate, Count) :-
promise_equivalent_solutions[Count] (
Line 721 ⟶ 722:
bag_sum(Predicate, Sum),
(if N = 0 then Avg = nan else Avg is Sum/float(N)).
promise_equivalent_solutions [Max] (▼
▲:- pred bag_max_date(pred(maybe_date)::(pred(out) is nondet), maybe_date::out) is det.
(pred(X::in,Y::in,Z::out) is det :-
Initial, Max)).
▲bag_max_date(Predicate, Max) :-
▲ promise_equivalent_solutions[Max]
▲ (unsorted_aggregate(Predicate, max_date, no, Max)).
main(!IO) :-
Line 741 ⟶ 737:
bag_avg(Scores, Avg),
bag_sum(Scores, Sum),
Dates = (pred(Date::out) is nondet :- visit(Id,Date,_), Date=date(_,_,_)),
(if MaxDate1 = date(0,0,0) then MaxDate = no else MaxDate = MaxDate1)),
Solutions),
foldl(io.write_line, Solutions, !IO).</lang>
|