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

Reply via email to