From 847feba6f0cf9ca175f3786dbcefacdc3f1cac5a Mon Sep 17 00:00:00 2001 From: Jim Pryor Date: Thu, 23 Sep 2010 04:37:31 -0400 Subject: [PATCH] tweak lambda evaluator Signed-off-by: Jim Pryor --- code/parse.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/code/parse.js b/code/parse.js index 27182189..8a4761b5 100644 --- a/code/parse.js +++ b/code/parse.js @@ -40,8 +40,8 @@ var make_parse = function () { 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) { @@ -126,14 +126,13 @@ var make_parse = function () { 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"); @@ -149,10 +148,16 @@ var make_parse = function () { 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; }; -- 2.11.0