X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=code%2Flambda.js;h=0eea4c9275befaeafb673d3696e8a813dfbfce1f;hp=132d9e93f588977c410c578ac68f569021368fca;hb=3641a9827575d2eba30d316395eb3db7c45a1477;hpb=47ea0791bc48f4fe4fcb95b89bbaf599a1076c80 diff --git a/code/lambda.js b/code/lambda.js index 132d9e93..0eea4c92 100644 --- a/code/lambda.js +++ b/code/lambda.js @@ -363,9 +363,9 @@ function Lambda_lam(variable, body) { // var term = new Lambda_lam(this.bound, this.body.eval_loop([], eta)); var term = new Lambda_lam(this.bound, reduce(this.body, eta, false)); if (eta) { - return term.check_eta(); + return [null, term.check_eta()]; } else { - return term; + return [null, term]; } } else { var x = stack[0]; @@ -450,42 +450,11 @@ 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 -*/ +// Chris's original + // // Basic data structure, essentially a LISP/Scheme-like cons // // pre-terminal nodes are expected to be of the form new cons(null, "string") // function cons(car, cdr) {