mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 01:43:35 +00:00
add a __member predicate for nondeterministically getting the
map.m & tree234.m: add a __member predicate for nondeterministically getting the members of a map or tree. random.m: replace the random number generator with the original proper one.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
|
||||
:- import_module array, bag, bimap, bintree, bintree_set, char, dir.
|
||||
:- import_module float, graph, group, int, io.
|
||||
:- import_module list, map, pqueue, queue, random, relation, require.
|
||||
:- import_module list, map, pqueue, queue, random, require.
|
||||
:- import_module set, stack, std_util, string, term, term_io.
|
||||
:- import_module tree234, varset, store.
|
||||
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
:- pred map__contains(map(K,_V), K).
|
||||
:- mode map__contains(in, in) is semidet.
|
||||
|
||||
:- pred map__member(map(K,V), K, V).
|
||||
:- mode map__member(in, out, out) is nondet.
|
||||
|
||||
% Search map for key.
|
||||
:- pred map__search(map(K,V), K, V).
|
||||
:- mode map__search(in, in, in) is semidet. % implied
|
||||
@@ -176,6 +179,9 @@ map__is_empty(M) :-
|
||||
map__contains(Map, K) :-
|
||||
map__search(Map, K, _).
|
||||
|
||||
map__member(Map, K, V) :-
|
||||
tree234__member(Map, K, V).
|
||||
|
||||
:- map__search(_Map, K, _V) when K. % required by bimap.nl
|
||||
|
||||
map__search(Map, K, V) :-
|
||||
|
||||
@@ -52,7 +52,6 @@ random__params(2416, 374441, 1771875).
|
||||
random__init(I0, RS) :-
|
||||
RS = I0.
|
||||
|
||||
/**** temp hack - we use the version below
|
||||
random__random(I, RS0, RS) :-
|
||||
RS0 = I0,
|
||||
random__params(A, C, M),
|
||||
@@ -60,7 +59,6 @@ random__random(I, RS0, RS) :-
|
||||
I2 is I1 + C,
|
||||
I is I2 mod M,
|
||||
RS = I.
|
||||
*****/
|
||||
|
||||
random__randmax(M1, Rs0, Rs) :-
|
||||
Rs0 = I,
|
||||
@@ -68,12 +66,12 @@ random__randmax(M1, Rs0, Rs) :-
|
||||
M1 is M - 1,
|
||||
Rs = I.
|
||||
|
||||
/*** start of temp hack ****/
|
||||
/*** start of temp hack
|
||||
% we use this code since the above doesn't work with sicstus
|
||||
random__random(R, X, X1) :-
|
||||
X1 is X + 1,
|
||||
random__bit_reverse(X1, R).
|
||||
|
||||
****/
|
||||
|
||||
random__bit_reverse(A, B) :-
|
||||
A0 is A /\ 255,
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
:- pred tree234__init(tree234(K, V)).
|
||||
:- mode tree234__init(out) is det.
|
||||
|
||||
:- pred tree234__member(tree234(K, V), K, V).
|
||||
:- mode tree234__member(in, out, out) is nondet.
|
||||
|
||||
:- pred tree234__search(tree234(K, V), K, V).
|
||||
:- mode tree234__search(in, in, out) is semidet.
|
||||
|
||||
@@ -76,6 +79,52 @@ tree234__init(empty).
|
||||
|
||||
%------------------------------------------------------------------------------%
|
||||
|
||||
tree234__member(empty, _K, _V) :- fail.
|
||||
tree234__member(two(K0, V0, T0, T1), K, V) :-
|
||||
(
|
||||
K = K0,
|
||||
V = V0
|
||||
;
|
||||
tree234__member(T0, K, V)
|
||||
;
|
||||
tree234__member(T1, K, V)
|
||||
).
|
||||
tree234__member(three(K0, V0, K1, V1, T0, T1, T2), K, V) :-
|
||||
(
|
||||
K = K0,
|
||||
V = V0
|
||||
;
|
||||
K = K1,
|
||||
V = V1
|
||||
;
|
||||
tree234__member(T0, K, V)
|
||||
;
|
||||
tree234__member(T1, K, V)
|
||||
;
|
||||
tree234__member(T2, K, V)
|
||||
).
|
||||
tree234__member(four(K0, V0, K1, V1, K2, V2, T0, T1, T2, T3), K, V) :-
|
||||
(
|
||||
K = K0,
|
||||
V = V0
|
||||
;
|
||||
K = K1,
|
||||
V = V1
|
||||
;
|
||||
K = K2,
|
||||
V = V2
|
||||
;
|
||||
tree234__member(T0, K, V)
|
||||
;
|
||||
tree234__member(T1, K, V)
|
||||
;
|
||||
tree234__member(T2, K, V)
|
||||
;
|
||||
tree234__member(T3, K, V)
|
||||
).
|
||||
|
||||
%------------------------------------------------------------------------------%
|
||||
|
||||
tree234__search(empty, _K, _V) :- fail.
|
||||
tree234__search(two(K0, V0, T0, T1), K, V) :-
|
||||
compare(Result, K, K0),
|
||||
|
||||
Reference in New Issue
Block a user