Dear Mark,
You should use one of the abstractions in the module Combinator. They allow
you to build nondeterministic statements (like 'or', or 'choice') on the
fly. Here is a possible solution, built with the combinator 'dis'.
fun {Combinations Xs}
%% nondeterministically construct Ys from Xs
proc {Script Ys}
Ys={Map Xs ChooseAmong}
end
%% nondeterministically construct Y from the tuple of values Spec
proc {ChooseAmong Spec Y}
fun {ChoiceFor X}
proc {$} X=Y end
end
in
{Combinator.'dis' {Record.map Spec ChoiceFor}}
end
in
{SearchAll Script}
end
Note that it does pretty much the same as an FD program. It simply uses
more primitive search constructs.
Cheers,
Raphael
On Tue, Feb 9, 2010 at 2:05 PM, mark richardson <[email protected]>wrote:
> Hi,
>
> I have a short script to calculate all possible combinations of a list such
> as [1#2 3 4#5] , the tuples representing a choice between two values.
> Solutions to this would be [1 3 4] [1 3 5] [2 3 4] [2 3 5] for example.
> The problem translates quite nicely into a constraint based search using FD
> but it set me wondering if their was a more efficient approach using choice
> or dis recursively (ie. without using loops)
> I've had no success as yet trying to find such a solution and wondered if
> anyone had any opinions on this?
>
> Regards
>
> Mark
>
> --
> Mark Richardson MBCS
> Research Assistant
> University of Teesside, UK
> Email: [email protected]
> [email protected]
> Skype: mark.richardson.
>
>
> _________________________________________________________________________________
> mozart-users mailing list
> [email protected]
> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users