List relations are lists of tuples with relational calculus operators defined on them.
[ < Exp₁₁, Exp₁₂, ... > , < Exp₂₁, Exp₂₂, ... > , ... ]
A list relation is a list of elements with the following property:
- All elements have the same static tuple type.
ListRelations are thus nothing more than lists of tuples, but since they are used so often we provide a shorthand notation for them.
ListRelations are represented by the type
lrel[T₁ L₁, T₂ L₂, ... ], where T₁, T₂, ... are arbitrary types and
L₁, L₂, ... are optional labels. It is a shorthand for
list[tuple[T₁ L₁, T₂ L₂, ... ]].
An n-ary list relation with m tuples is denoted by
[< E₁₁, E₁₂, ..., E₁ₙ>,< E₂₁, E₂₂, ..., E₂ₙ>, ..., < Eₘ₁, Eₘ₂, ..., Eₘₙ>],
where the Eᵢⱼ are expressions that yield the desired element type Tᵢ.
Since list relations are a form of list all operations (see List) and functions (see List) are also applicable to relations.
The following additional operators are provided for list relations:
There are also library functions available for list relations.
rascal>[<1,10>, <2,20>, <3,30>]
lrel[int,int] we can also give
list[tuple[int,int]] as type of the above expression
remember that these types are interchangeable.
rascal>[<"a",10>, <"b",20>, <"c",30>]
rascal>[<"a", 1, "b">, <"c", 2, "d">]