There is only one calculus form: the monoid comprehension. It is described in detail in the paper: "Optimizing Object Queries Using an Effective Calculus". It takes the form:
compr( monoid, head, q1, ..., qn )
where monoid is a monoid name, such as, set, bag, sum, all, some, etc,
head is an expression, and q1, ..., qn is a possibly empty
list of qualifiers. Each qualifier is either:
select distinct struct( E: e.name, M: ( select c.name from c in e.children where c.age > 18 ) ) from e in Employees where e.name = "Smith";has the following form in the calculus:
compr( set, struct( bind( E, project(e,name) ),
bind( M, compr( bag, project(c,name),
iterate(c,project(e,children)),
gt(project(c,age),18) ) ) ),
iterate(e,Employees),
eq(project(e,name),"Smith") )
Last modified: 1/20/99 by Leonidas Fegaras