a = o.arity || "keyword";
}
} else if (a === "number") {
- o = symbol_table["(literal)"];
- a = "literal";
+ o = symbol_table["(number)"];
+ a = "literal";
} else if (a === "operator") {
o = symbol_table[v];
if (!o) {
return body;
};
+ var number_handler = function () {
- var itself = function () {
- return this;
};
symbol("(end)");
symbol("(name)").handler = name_handler;
- symbol("(literal)").handler = itself;
+ symbol("(number)").handler = number_handler;
symbol("let").handler = lambda_handler;
symbol("=").handler = branch_handler;
symbol("in");
var x = symbol(s);
x.handler = function () {
this.value = symbol_table[this.id].value;
- return this;
+ if (this.first) {
+ return make_app(this.first.handler(), this.value);
+ } else {
+ return this.value;
+ }
};
- x.value = v;
+ // constants have their own id and arity = literal
+ // numbers have id = "(number)" and arity = literal
x.arity = "literal";
+ x.value = v;
return x;
};