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:
Thomas Conway
1995-06-22 23:57:28 +00:00
parent 0dc8ca50d8
commit 407298c19a
4 changed files with 58 additions and 5 deletions

View File

@@ -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.

View File

@@ -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) :-

View File

@@ -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,

View File

@@ -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),