Philipp Marcus wrote: > Hi, > > I want to write a constraint like this (using propia, cardinal and fd): > > N `:: [] + [ ["B","F"], ["S"], ["S","F"] ]:[1], > A in N, > member("S",A) infers most > > i.e. the set N can be either ["B","F"], ["S"] or ["S","F"] If I understand correctly, you want to have a set of sets. I'm not intimately familiar with lib(cardinal) (it's a contributed library), but it seems to support this, at least to some extent. The following code works: ?- N `:: [] + [['B', 'F'], ['S'], ['F', 'S']] : [1], A `:: [] .. ['B', 'F', 'S'], A in N, 'S' in A, set_labeling([N]). N = [['F', 'S']] A = ['F', 'S'] Yes (0.00s cpu, solution 1, maybe more) N = [['S']] A = ['S'] Yes (0.00s cpu, solution 2) Notes: 1. I have used atoms 'S' instead of strings "S" as per my earlier advice. 2. lib(cardinal) does not currently work with propia, because it does not define an msg/3 generalisation predicate. If someone wants to add this, please refer to e.g. sd.ecl for an example. -- JoachimReceived on Tue Apr 20 2010 - 05:42:46 CEST
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:20 CEST