[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