new cons := lambda a { ret := lambda b {
ret := lambda code {
if (code = 0) { ret := a; }
if (code = 1) { ret := b; }
if (code = 2) { ret := true; } # for the "iscons" function
};
};};
new car := lambda c { ret := c(0); };
new cdr := lambda c { ret := c(1); };
# nil is the empty list.
new nil := lambda code {
if (code = 2) { ret := false; }
else { ret := 1/0; } # This is like throwing an exception in a dirty way.
};
new iscons := lambda c { ret := c(2); };
new isnil := lambda c { ret := not c(2); };
new print_list := lambda L {
if (iscons(L)) {
write car(L);
print_list(cdr(L));
}
};
print_list( cons(1)(cons(2)(cons(3)(nil))) );