Error Code: ARITY MISMATCH
This guide explains why an arity mismatch error may occur and how to fix it.
If you think of relations as tables,
the arity of a relation in Rel is the number of columns.
For instance, the constants true and false are relations of arity 0, a single element is a relation of arity 1, and so on.
See Relations in Rel Primer: Basic Syntax for more details.
Consider the following example that returns an arity mismatch error:
def friends = {("Mike", "Anna"); ("Zoe", "Jenn")}
def zoes_friends = friends("Zoe") 
The first relation, friends, contains tuples of friends.
The second relation, zoes_friends, defines Zoe’s friends.
The error occurs because:
-
The Rel compiler expects a different number of arguments. The relation
friends("Zoe")has only one argument, whilefriendsis defined by tuples of arity 2. -
The second relation has parentheses
()instead of square brackets[]. You can think of the operator()as a special case of partial relational application used as a boolean filter, with output arity 0 — i.e.,trueorfalse. This means that when you writefriends("Zoe"), the Rel compiler expects a second argument to check if that tuple is within the relationfriends. See Arity in Rel Primer: Basic Syntax for more details.
Here’s one way to write the example above correctly:
// read query
def friends = {("Mike", "Anna"); ("Zoe", "Jenn")}
def zoes_friends = friends["Zoe"]
def output = zoes_friendsThis returns Zoe’s friends list.
You can verify the output above:
// read query
def friends = {("Mike", "Anna"); ("Zoe", "Jenn")}
def zoes_friends = friends("Zoe", "Jenn")
def output = zoes_friendsThis returns (), i.e., true, confirming that the tuple is within the relation friends.