From: Jim Pryor Date: Thu, 23 Sep 2010 09:58:31 +0000 (-0400) Subject: tweak lambda evaluator X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=492cb946fbc21f0d3db9de9bd57bd755bf4ca620 tweak lambda evaluator Signed-off-by: Jim Pryor --- diff --git a/code/lambda.js b/code/lambda.js index f87b3559..c0dbb0f0 100644 --- a/code/lambda.js +++ b/code/lambda.js @@ -410,7 +410,39 @@ try { } } catch (e) {} - +/* +let true = K in +let false = \x y. y in +let and = \l r. l r false in +let or = \l r. l true r in +let pair = \u v f. f u v in +let triple = \u v w f. f u v w in +let succ = \n s z. s (n s z) in +let pred = \n s z. n (\u v. v (u s)) (K z) I in +let ifzero = \n. n (\u v. v (u succ)) (K 0) (\n withp whenz. withp n) in +let add = \m n. n succ m in +let mul = \m n. n (\z. add m z) 0 in +let mul = \m n s. m (n s) in +let sub = (\mzero msucc mtail. \m n. n mtail (m msucc mzero) true) (pair 0 I) (\d. d (\a b. pair (succ a) (K d))) (\d. d false d) in +let min = \m n. sub m (sub m n) in +let max = \m n. add n (sub m n) in +let lt = (\mzero msucc mtail. \n m. n mtail (m msucc mzero) true (\x. true) false) (pair 0 I) (\d. d (\a b. pair (succ a) (K d))) (\d. d false d) in +let leq = (\mzero msucc mtail. \m n. n mtail (m msucc mzero) true (\x. false) true) (pair 0 I) (\d. d (\a b. pair (succ a) (K d))) (\d. d false d) in +let eq = (\mzero msucc mtail. \m n. n mtail (m msucc mzero) true (\x. false) true) (pair 0 (K (pair 1 I))) (\d. d (\a b. pair (succ a) (K d))) (\d. d false d) in +let divmod = (\mzero msucc mtail. \n divisor. + (\dhead. n (mtail dhead) (\sel. dhead (sel 0 0))) + (divisor msucc mzero (\a b c. c x)) + (\d m a b c. pair d m) ) + (triple succ (K 0) I) + (\d. triple I succ (K d)) + (\dhead d. d (\dz mz df mf drest sel. drest dhead (sel (df dz) (mf mz)))) in +let div = \n d. divmod n d true in +let mod = \n d. divmod n d false in +let Y = \f. (\y. f(y y)) (\y. f(y y)) in +let Z = (\u f. f(u u f)) (\u f. f(u u f)) in +let fact = \y. y (\f n. ifzero n (\p. mul n (f p)) 1) in +fact Z 3 +*/ diff --git a/code/parse.js b/code/parse.js index 6882d79f..4d2bc8d6 100644 --- a/code/parse.js +++ b/code/parse.js @@ -4,6 +4,9 @@ // http://javascript.crockford.com/tdop/index.html // Douglas Crockford 2010-06-26 +// See also http://effbot.org/zone/simple-top-down-parsing.htm + + /*jslint onevar: false */ @@ -65,6 +68,7 @@ var make_parse = function () { } }; + /* try { if (console && console.debug) { function print() { @@ -72,6 +76,7 @@ var make_parse = function () { } } } catch (e) {} + */ var symbol = function (id) { var s = symbol_table[id];