From 407298c19abd5c4222bbeeacd7bdabff7544c636 Mon Sep 17 00:00:00 2001 From: Thomas Conway Date: Thu, 22 Jun 1995 23:57:28 +0000 Subject: [PATCH] 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. --- library/library.m | 2 +- library/map.m | 6 ++++++ library/random.m | 6 ++---- library/tree234.m | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/library/library.m b/library/library.m index c9c86abf6..d55ed0316 100644 --- a/library/library.m +++ b/library/library.m @@ -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. diff --git a/library/map.m b/library/map.m index 066d69ad1..b1325a9b6 100644 --- a/library/map.m +++ b/library/map.m @@ -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) :- diff --git a/library/random.m b/library/random.m index ff98abca3..4ad5e234a 100644 --- a/library/random.m +++ b/library/random.m @@ -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, diff --git a/library/tree234.m b/library/tree234.m index 6b2aad6fd..75fd16442 100644 --- a/library/tree234.m +++ b/library/tree234.m @@ -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),