# 8 Feature Constraints: `RecordC`

This chapter explains procedures dedicated to feature constraints.

`is`

  > `{RecordC.is` `*X``` `?B``}`

  tests whether `X` has kind record.

`tell`

  > `{RecordC.tell` `+L``` `?R``}`

  tells the constraint store that `R` is a record with label `L`.

`tellSize`

  > `{RecordC.tellSize` `+L``` `+I``` `?R``}`

  tells the constraint store that `R` is a record with label `L`.

  Signals the implementation that it is likely that `I` features are told to `R`. `RecordC.tellSize` is semantically equivalent to `RecordC.tell`, but the current implementation optimizes memory allocation.

`^`

  > `{RecordC.'^'` `R``` `+LI``` `X``}`

  tells the constraint store that `R` is a FC having field `X` at feature `LI`.

  Is supported by the infix operator `^`, that is

  > `{RecordC.'^'` `R``` `LI``` `X``}`

  can also be written as

  > `R``^``LI``=``X`

`width`

  > `{RecordC.width` `*R``` `?D``}`

  posts a propagator for the constraint that `D` is the width of `R`. Also tells the constraint store that `D` is a finite domain integer.

`reflectArity`

  > `{RecordC.reflectArity` `*R``` `?LIs``}`

  returns a list `LIs` containing the currently known features of `R`.

`monitorArity`

  > `{RecordC.monitorArity` `*R``` `?P``` `?LIs``}`

  returns a nullary procedure `P` and a stream `LIs` containing the currently known features of `R`.

  Features appear in the stream as soon as they become known to the constraint store. Application of `P` closes the stream and deletes the propagator. The stream is automatically closed once the constraint store determines `R`.

`hasLabel`

  > `{RecordC.hasLabel` `*R``` `?B``}`

  blocks until `R` becomes a feature structure. Tests whether `R` has been told a label with `RecordC.tell`.