As was mentioned earlier, lists can be constructed by writing a comma-separated sequence of expressions inside curly braces:
{expression-1, expression-2, ..., expression-N}
The resulting list has the value of expression-1 as its first element, that of expression-2 as the second, etc.
{3 < 4, 3 <= 4, 3 >= 4, 3 > 4} => {1, 1, 0, 0}
Additionally, one may precede any of these expressions by the splicing
operator, `@'. Such an expression must return a list; rather than the
old list itself becoming an element of the new list, all of the elements of
the old list are included in the new list. This concept is easy to
understand, but hard to explain in words, so here are some examples. For
these examples, assume that the variable a
has the value {2, 3,
4}
and that b
has the value {"Foo", "Bar"}
:
{1, a, 5} => {1, {2, 3, 4}, 5} {1, @a, 5} => {1, 2, 3, 4, 5} {a, @a} => {{2, 3, 4}, 2, 3, 4} {@a, @b} => {2, 3, 4, "Foo", "Bar"}
If the splicing operator (`@') precedes an expression whose value
is not a list, then E_TYPE
is raised as the value of the list
construction as a whole.
The list membership expression tests whether or not a given MOO value is an element of a given list and, if so, with what index:
expression-1 in expression-2
Expression-2 must return a list; otherwise, E_TYPE
is raised.
If the value of expression-1 is in that list, then the index of its first
occurrence in the list is returned; otherwise, the `in' expression returns
0.
2 in {5, 8, 2, 3} => 3 7 in {5, 8, 2, 3} => 0 "bar" in {"Foo", "Bar", "Baz"} => 2
Note that the list membership operator is case-insensitive in comparing strings, just like the comparison operators. To perform a case-sensitive list membership test, use the `is_member' function described later. Note also that since it returns zero only if the given value is not in the given list, the `in' expression can be used either as a membership test or as an element locator.