[m-rev.] for review: added list__det_split_list/4

Samrith UONG samuong at gmail.com
Wed Jan 25 15:09:18 AEDT 2006


For review by anyone.

Estimated hours taken: 0.2

library/list.m:
        Added a new predicate list__det_split_list/4, which is a
        determinstic version of list__split_list/4.

Index: library/list.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/list.m,v
retrieving revision 1.143
diff -u -r1.143 list.m
--- library/list.m      15 Nov 2005 04:59:23 -0000      1.143
+++ library/list.m      25 Jan 2006 04:04:19 -0000
@@ -193,6 +193,14 @@
 :- pred list__split_list(int::in, list(T)::in, list(T)::out, list(T)::out)
     is semidet.

+    % list__det_split_list(Len, List, Start, End):
+    %
+    % A deterministic version of list__split_list, which aborts instead
+    % of failing if Len > list__length(List).
+    %
+:- pred list__det_split_list(int::in, list(T)::in, list(T)::out, list(T)::out)
+    is det.
+
     % list__take(Len, List, Start):
     %
     % `Start' is the first `Len' elements of `List'. Fails if `List' has
@@ -1510,6 +1518,16 @@
         list__split_list(N - 1, List1, Start1, End)
     ).

+list__det_split_list(N, List, Start, End) :-
+    ( if
+        list__split_list(N, List, Start0, End0)
+    then
+        Start = Start0,
+        End = End0
+    else
+        error("list__det_split_list: index out of range")
+    ).
+
 list__take(N, As, Bs) :-
     ( N > 0 ->
         As = [A | As1],

--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list