Mantra has built-in list and dict collections and associated literals:
list filenames = ["t.html", "u.html"];
list states = [2,9,1];
dict phones = ["Ter"="x5707", "Mark"="x5135"];
Note that "=" is overloaded (means assignment also). It is unambiguous, however.
The array index operator has been overloaded for index lists and dicts:
n = names[i];
p = phones[name];
Indexes start at 0 for lists.
For dict, of course, a[x] invokes the a.get(x) method.
Lists and dicts grow to include new members. If index 42 does not exist in a list, the list grows to be large enough so that the following does not cause a runtime exception:
The same is true for dicts:
Sample:
dict m = dict();
m["Ter"] = 1;
m["Tom"] = 3;
m["Able"] = 9;
m.keys():{n | print(m[n]); print(" "); println(n);};
list keyList = m.keys().toList();
println(keyList);
Naturally, lists and dicts and sets can all be nested, which also highlights that lists are heterogenous.
a = [1,2,["A","B"],[1=2,2="Tom"]];
OrderedDict is a dict where the order of addition is remember.
The range operator ".." yields an interval that can be used to select a contiguous subset of a list yielding a stream object:
range first5 = 0..4;
first5names = names[first5];
without copying the values. As a special case, sets may be used as list or dict indices to indicate a noncontiguous set of elements:
list goodones = [1,99,20];
subset = names[goodones];
Tree example:
tree t = ^("hi" 34 Y(10) ^(99 32)); println(t.toStringTree());