[mercury-users] Switches and Determinism
Jonathan Morgan
jonmmorgan at gmail.com
Mon Sep 11 13:55:11 AEST 2006
If I have a type like the following type:
:- type switch_test --->
type1;
type2;
type3.
Then the following code looks fairly deterministic to me.
:- func test(switch_test) = int.
test(S) = Y :-
(
S = type1,
Y = 1
;
(S = type2
; S = type3),
Y = 2
).
However, the compiler tells me that this is non-deterministic. Surely
things like this are wanted in other places? How can you make it so
that a switch has one clause for multiple types being switched on?
switch_test.m:015: In `test(in) = out':
switch_test.m:015: error: determinism declaration not satisfied.
switch_test.m:015: Declared `det', inferred `nondet'.
switch_test.m:018: Unification of `S' and `switch_test.type1' can fail.
switch_test.m:022: The switch on S does not cover switch_test.type1/0.
switch_test.m:018: Disjunction has multiple clauses with solutions.
switch_test.m:015: Error: invalid determinism for `test(in) = out':
switch_test.m:015: the primary mode of a function cannot be `nondet'.
For more information, try recompiling with `-E'.
Jon
--------------------------------------------------------------------------
mercury-users mailing list
Post messages to: mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions: mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the users
mailing list