[m-rev.] diff: add maybe.map_fold3_maybe/9
Julien Fischer
juliensf at csse.unimelb.edu.au
Thu Jun 23 13:35:44 AEST 2011
Branches: main
library/maybe.m:
Add the predicate map_fold3_maybe/9.
Add further modes for the other fold predicates
in this module.
NEWS:
Announce the above changes.
Julien.
Index: NEWS
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/NEWS,v
retrieving revision 1.585
diff -u -r1.585 NEWS
--- NEWS 15 Jun 2011 01:05:32 -0000 1.585
+++ NEWS 23 Jun 2011 03:32:25 -0000
@@ -189,6 +189,10 @@
a new array from a list with the elements of the array occurring in
the reverse order to that of the list.
+* We have added the predicate maybe.map_fold3_maybe/9 and also added
+ additional modes for maybe.fold_maybe/4, maybe.map_fold_maybe/5,
+ and maybe.map_fold2_maybe/7.
+
NEWS for Mercury 11.01
----------------------
Index: library/maybe.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/maybe.m,v
retrieving revision 1.5
diff -u -r1.5 maybe.m
--- library/maybe.m 7 Oct 2010 02:38:10 -0000 1.5
+++ library/maybe.m 23 Jun 2011 03:22:37 -0000
@@ -65,8 +65,11 @@
%
:- pred fold_maybe(pred(T, U, U), maybe(T), U, U).
:- mode fold_maybe(pred(in, in, out) is det, in, in, out) is det.
-:- mode fold_maybe(pred(in, in, out) is semidet, in, in, out) is semidet.
+:- mode fold_maybe(pred(in, mdi, muo) is det, in, mdi, muo) is det.
:- mode fold_maybe(pred(in, di, uo) is det, in, di, uo) is det.
+:- mode fold_maybe(pred(in, in, out) is semidet, in, in, out) is semidet.
+:- mode fold_maybe(pred(in, mdi, muo) is semidet, in, mdi, muo) is semidet.
+:- mode fold_maybe(pred(in, di, uo) is semidet, in, di, uo) is semidet.
% fold_maybe(_, no, Acc) = Acc.
% fold_maybe(F, yes(Value), Acc0) = F(Acc0).
@@ -78,17 +81,52 @@
% P(Value, Value, !Acc).
%
:- pred map_fold_maybe(pred(T, U, Acc, Acc), maybe(T), maybe(U), Acc, Acc).
-:- mode map_fold_maybe(pred(in, out, in, out) is det, in, out, in, out) is det.
-:- mode map_fold_maybe(pred(in, out, di, uo) is det, in, out, di, uo) is det.
+:- mode map_fold_maybe(pred(in, out, in, out) is det, in, out,
+ in, out) is det.
+:- mode map_fold_maybe(pred(in, out, mdi, muo) is det, in, out,
+ mdi, muo) is det.
+:- mode map_fold_maybe(pred(in, out, di, uo) is det, in, out,
+ di, uo) is det.
+:- mode map_fold_maybe(pred(in, out, in, out) is semidet, in, out,
+ in, out) is semidet.
+:- mode map_fold_maybe(pred(in, out, mdi, muo) is semidet, in, out,
+ mdi, muo) is semidet.
+:- mode map_fold_maybe(pred(in, out, di, uo) is semidet, in, out,
+ di, uo) is semidet.
% As above, but with two accumulators.
%
:- pred map_fold2_maybe(pred(T, U, Acc1, Acc1, Acc2, Acc2),
maybe(T), maybe(U), Acc1, Acc1, Acc2, Acc2).
-:- mode map_fold2_maybe(pred(in, out, in, out, in, out) is det, in, out,
- in, out, in, out) is det.
+:- mode map_fold2_maybe(pred(in, out, in, out, in, out) is det,
+ in, out, in, out, in, out) is det.
+:- mode map_fold2_maybe(pred(in, out, in, out, mdi, muo) is det,
+ in, out, in, out, mdi, muo) is det.
:- mode map_fold2_maybe(pred(in, out, in, out, di, uo) is det,
in, out, in, out, di, uo) is det.
+:- mode map_fold2_maybe(pred(in, out, in, out, in, out) is semidet,
+ in, out, in, out, in, out) is semidet.
+:- mode map_fold2_maybe(pred(in, out, in, out, mdi, muo) is semidet,
+ in, out, in, out, mdi, muo) is semidet.
+:- mode map_fold2_maybe(pred(in, out, in, out, di, uo) is semidet,
+ in, out, in, out, di, uo) is semidet.
+
+ % As above, but with three accumulators.
+ %
+:- pred map_fold3_maybe(pred(T, U, Acc1, Acc1, Acc2, Acc2, Acc3, Acc3),
+ maybe(T), maybe(U), Acc1, Acc1, Acc2, Acc2, Acc3, Acc3).
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, in, out) is det,
+ in, out, in, out, in, out, in, out) is det.
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, mdi, muo) is det,
+ in, out, in, out, in, out, mdi, muo) is det.
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, di, uo) is det,
+ in, out, in, out, in, out, di, uo) is det.
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, in, out) is semidet,
+ in, out, in, out, in, out, in, out) is semidet.
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, mdi, muo) is semidet,
+ in, out, in, out, in, out, mdi, muo) is semidet.
+:- mode map_fold3_maybe(pred(in, out, in, out, in, out, di, uo) is semidet,
+ in, out, in, out, in, out, di, uo) is semidet.
% maybe_is_yes(yes(X), X).
%
@@ -121,6 +159,10 @@
map_fold2_maybe(P, yes(T0), yes(T), !A, !B) :-
P(T0, T, !A, !B).
+map_fold3_maybe(_, no, no, !A, !B, !C).
+map_fold3_maybe(P, yes(T0), yes(T), !A, !B, !C) :-
+ P(T0, T, !A, !B, !C).
+
maybe_is_yes(yes(X), X).
%-----------------------------------------------------------------------------%
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list