@{ createList() { return {}; } append(s, e) { s[length(s)] = e; } map(f, seq, g) { out = {}; if (g) { for (i in seq) { e = seq[i]; if (g(e)) { e = f(e); } append(out, e); } } else { for (i in seq) { append(out, f(seq[i])); } } out; } select(f, s) { out = {}; for (i in s) { e = s[i]; if (f(e)) { append(out, e); } } out; } reject(f, s) { out = {}; for (i in s) { e = s[i]; if (!f(e)) { append(out, e); } } out; } last(s) { s[length(s)-1]; } }