Eta-reduction added.

portnov [2008-06-01 15:13:16]
Eta-reduction added.
Filename
data2.py
diff --git a/data2.py b/data2.py
index bfe099e..b0f5654 100644
--- a/data2.py
+++ b/data2.py
@@ -261,10 +261,18 @@ class Lambda(Term):
     return l

   def eval(self,excl_vars=Set()):
+    self = self.eval_vars(excl_vars + Set(self.var))
+    if type(self) != Lambda:
+      return self
     return Lambda(self.var,self.expr.eval(excl_vars + Set(self.var)))

   def eval_vars(self,excl_vars=Set()):
-    return Lambda(self.var, self.expr.eval_vars(excl_vars + Set(self.var)))
+    l = Lambda(self.var, self.expr.eval_vars(excl_vars + Set(self.var)))
+    # eta-reduction
+    if type(l.expr)==Expr and l.expr.op=='@' and str(l.expr.a2)==str(l.var):
+      return l.expr.a1
+    else:
+      return l

   def apply(self,expr,excl_vars=Set()):
     old = copy(self)
ViewGit