Index |

All Packages |

All Categories |

By Author |

ap (3) |

cp (3) |

dp (3) |

exe (3) |

gui (0) |

gui/gtk (0) |

gui/tk (4) |

io (1) |

lib (11) |

math (0) |

net (9) |

nlp (18) |

op (4) |

os (2) |

program (3) |

sp (2) |

tool (9) |

wp (2) |

xml (2) |

type | : | package |

id | : | mogul:/duchier/select |

section | : | mogul:/duchier |

version | : | 1.8 |

blurb | : | implements the selection constraint e.g. S={Select.fs [S1 ... Sn] I} |

author | : | Denys Duchier |

category | : | cp |

documentation | : | index.html |

download | : | duchier-select__1.2.5__source__1.8.pkg duchier-select__1.3.0__source__1.8.pkg |

provides | : | x-ozlib://duchier/cp/Select.ozfx-ozlib://duchier/cp/SelectFD.sox-ozlib://duchier/cp/SelectFS.sox-ozlib://duchier/cp/SelectUnion.sox-ozlib://duchier/cp/SelectInter.sox-ozlib://duchier/cp/SeqUnion.sox-ozlib://duchier/cp/SelectThe.sox-ozlib://duchier/cp/SeqSelect.so |

**Note: from now on, this module is only available as an ozmake package.**

This module implements the **selection constraints** for finite domains
and for finite sets.

the selection constraint `S={Select.fs [S1 ... Sn] I}`

has the same declarative semantics as `S={Nth [S1 ... Sn] I}`

,
i.e. it unifies `X`

with the `I`

th
element of sequence `[S1 ... Sn]`

. However, it is much more powerful
because it is also a **constraint**. All of `S`

, `S1`

,
..., `Sn`

, and `I`

can be constrained variables. In
particular:

`I`

can be a finite domain variable. If`S`

is incompatible with`Sk`

then integer`k`

is removed from the domain of`I`

.- the selection constraint provides a form of constructive disjunction.
With
`M={Select.fd [M1 ... Mn] I}`

the domain of`M`

is the union of those of the`Mi`

for`i`

in the domain of`I`

. Similarly, with`S={Select.fs [S1 ... Sn] I}`

the lower (resp. upper) bound of`S`

is the intersection (resp. union) of the lower (resp. upper) bounds of`Si`

for`i`

in the domain of`I`

.

As of version 1.3, the module also implements the selection union constraint
`{Select.union [S1 ... Sn] SI}`

which returns the union of the sets
`Si`

for `i`

in `SI`

.

As of version 1.5, the module also implements the selection intersection constraint
`{Select.inter [S1 ... Sn] SI}`

which returns the intersection of the sets
`Si`

for `i`

in `SI`

.

As of version 1.6, this package provides the *sequenced union
constraint* `{Select.seqUnion [S1 ... Sn] S}`

where`S`

is the union of the sets `Si`

which are
additionally constrained to be sequential, i.e. for
`i<j`

all elements of `Si`

are smaller than
elements of `Sj`

.

Version 1.8 - added *indexedUnion* constraint
`{Select.indexedUnion [I1#S1 ... In#Sn] SI}`

which returns the union of
the `Sk`

for `Ik`

in `SI`

.