Add the predicate map_fold3_maybe/9.

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.
This commit is contained in:
Julien Fischer
2011-06-23 03:36:10 +00:00
parent 8e7fe1075c
commit cd4bd74002
2 changed files with 52 additions and 6 deletions

4
NEWS
View File

@@ -189,6 +189,10 @@ Changes to the Mercury standard library:
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
----------------------

View File

@@ -1,7 +1,7 @@
%-----------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et wm=0 tw=0
%-----------------------------------------------------------------------------%
% Copyright (C) 1994-2006, 2010 The University of Melbourne.
% Copyright (C) 1994-2006, 2010-2011 The University of Melbourne.
% This file may only be copied under the terms of the GNU Library General
% Public License - see the file COPYING.LIB in the Mercury distribution.
%-----------------------------------------------------------------------------%
@@ -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(_, no, no, !A, !B).
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).
%-----------------------------------------------------------------------------%