Query Languages 291
• R := Distinct(R), if the query contains DISTINCT.
• R := Slice(R, o, l), if the query contains the directives “OFFSET o” and
“LIMIT l.” If o is not given, o is assumed to be 0. If l is not given, it is
replaced by the number of solutions of R less o.
These translations are relatively simple, and the function of each operator is
mostly obvious: OrderBy orders the solution sequence according to the given
sorting conditions, Distinct eliminates multiple occurrences of any solution in
the result, and Slice combines OFFSET and LIMIT to cut down the solution
sequence to the corresponding segment. The operator Project restricts the
domains of all solutions in a result to the variables chosen in SELECT, i.e. each
solution is replaced