id = λx. x const = λx y. x fix = (λx y. y (x x y)) λx y. y (x x y) arb = (λx. x x) λx. x x true = const false = const id if = id zero = const suc = λn x y. y n caseNat = λx y n. n x y isZero = caseNat true (const false) pred = caseNat arb id eqNat = fix λeqNat x y. if (isZero x) (if (isZero y) true false) (if (isZero y) false (eqNat (pred x) (pred y))) nil = const cons = λa d x y. y a d caseList = λx y l. l x y null = caseList true (λa d. false) car = caseList arb const cdr = caseList arb (const id) emptyEnv = nil extendEnv = λe n t. cons (cons n t) e lookupEnv = fix λlookupEnv z e n. if (null e) z (if (eqNat n (car (car e))) (cdr (car e)) (lookupEnv z (cdr e) n)) var = λn x y z. x n abs = λn a x y z. y n a app = λa b x y z. z a b caseTerm = λx y z t. t x y z eval = fix λeval t. caseTerm (lookupEnv arb) (λv b e x. eval b (extendEnv e v x)) (λx y e. eval x e (eval y e))
λ
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario