[mercury-users] uniqueness

valery at freesurf.fr valery at freesurf.fr
Mon Jun 12 22:27:37 AEST 2006


In my first attemps to use Mercury, I run into some problems related to
uniqueness. It's no surprise, it was the same with Clean !

:- pragma promise_pure(main/2).
main(!IO) :-
  N = 3,
  B = new(N, N, 0),
  mark((1, 2), 1, B, B1), % problem 1
%  (
%    in_bounds(B1, X, Y),
%    format("(%d, %d) -> %d\n", [i(X), i(Y), i(B1 ^ elem(X, Y))], !IO) %
problem 2
%  ),
  format("%d\n", [i(B1 ^ elem(1, 2))], !IO),
  impure report_stats.

:- type board == array2d(int).
:- type point ---> (int, int).

:- pred mark(point::in, int::in, board::array2d_di, board::array2d_uo) is
mark((X, Y), V, B0, B) :- B = B0 ^ elem(X, Y) := V.

:- pred is_free(point::in, board::in) is semidet.
is_free((X, Y), B) :- B ^ elem(X, Y) = 0.

1/ When I try to use the state variable syntax, that is, I replace "B, B1"
with "!B", the compiler chokes.

2/ The commented out portion is rejected as well. I suspect this is
because nondeterministic predicates are not allowed to perform IO, but the
error message doesn't state it clearly. What is the common idiom to output
the contents of a collection ?

3/ More generally, I need to model states more complex than a single
array, like several arrays plus a couple of integers. As I understand the
documentation, this is not yet possible, because uniqueness is limited to
IO and the array hacks. Is uniqueness for user defined types planned for
near future ?

-- Valery

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

More information about the users mailing list