[m-users.] (P ; not P)
jfondren at minimaltype.com
Tue Sep 10 16:26:15 AEST 2019
Mercury infers that the following is nondet:
:- func fizzbuzz(int) = string.
fizzbuzz(N) = R :-
fizz(N), buzz(N), R = "FizzBuzz"
fizz(N), not buzz(N), R = "Fizz"
not fizz(N), buzz(N), R = "Buzz"
not fizz(N), not buzz(N), R = string.from_int(N)
Where fizz/1 and buzz/1 are just semidet predicates:
:- pred fizz(int::in) is semidet.
:- pred buzz(int::in) is semidet.
Is there a right way to do a disjunction over semidet predicates like
this, or is turning them into the bools the best you can do if you
want a disjunction over all the cases?
( if fizz(N) then Fizz = yes else Fizz = no ),
( if buzz(N) then Buzz = yes else Buzz = no ),
Fizz = yes, Buzz = yes, R = "FizzBuzz"
More information about the users