Package nltk_lite :: Package contrib :: Module lambda
[hide private]
[frames] | no frames]

Source Code for Module nltk_lite.contrib.lambda

  1  # New lambda system (Steven Bird) 
  2   
3 -class Lambda:
4 - def __init__(self, *args):
5 if isinstance(args[0], str): 6 if len(args) == 1: 7 self._var = args[0] 8 self._type = 'v' 9 else: 10 self._var = args[0] 11 self._term = args[1] 12 self._type = 'l' 13 else: 14 self._f = args[0] 15 self._arg = args[1] 16 self._type = 'f'
17
18 - def equals(self, other):
19 if self.__class__ is not other.__class__: 20 return False 21 elif self._type is not other._type: 22 return False 23 elif self._type == 'v': 24 return self._var == other._var 25 elif self._type == 'l': 26 return self._var == other._var and self._term.equals(other._term) 27 elif self._type == 'f': 28 return self._f.equals(other._f) and self._arg.equals(other._arg)
29
30 - def variables(self):
31 if self._type == 'v': 32 return set([self._var]) 33 elif self._type == 'l': 34 return set([self._var]).union(self._term.variables()) 35 elif self._type == 'f': 36 return self._f.variables().union(self._arg.variables())
37
38 - def free(self):
39 if self._type == 'v': 40 return set([self._var]) 41 elif self._type == 'l': 42 return self._term.free().difference(set([self._var])) 43 elif self._type == 'f': 44 return self._f.free().union(self._arg.free())
45
46 - def subterms(self):
47 if self._type == 'v': 48 return set([self]) 49 elif self._type == 'l': 50 return self._term.subterms().union([self]) 51 elif self._type == 'f': 52 return self._f.subterms().union(self._arg.subterms()).union(set([self]))
53
54 - def replace(self, variable, expression):
55 if self._type == 'v': 56 if self._var == variable: 57 return expression 58 else: 59 return self 60 elif self._type == 'l': 61 return Lambda(self._var,\ 62 self._term.replace(variable, expression)) 63 elif self._type == 'f': 64 return Lambda(self._f.replace(variable, expression),\ 65 self._arg.replace(variable, expression))
66
67 - def simplify(self):
68 if self._type == 'v': 69 return self 70 elif self._type == 'l': 71 return Lambda(self._var, self._term.simplify()) 72 elif self._type == 'f': 73 f = self._f.simplify() 74 arg = self._arg.simplify() 75 if f._type == 'l': 76 return f._term.replace(f._var, arg).simplify() 77 else: 78 return self
79
80 - def __str__(self, continuation=0):
81 if self._type == 'v': 82 return '%s' % self._var 83 elif self._type == 'l': 84 if continuation: 85 prefix = ' ' 86 else: 87 prefix = '\\' 88 if self._term._type == 'l': 89 return '%s%s%s' % (prefix, self._var, self._term.__str__(1)) 90 else: 91 return '%s%s.%s' % (prefix, self._var, self._term) 92 elif self._type == 'f': 93 str_f = str(self._f) 94 if self._f._type == 'f': 95 str_f = str_f[1:-1] 96 return '(%s %s)' % (str_f, self._arg)
97
98 - def __repr__(self):
99 if self._type == 'v': 100 return "Lambda('%s')" % self._var 101 elif self._type == 'l': 102 return "Lambda('%s', '%s')" % (self._var, self._term) 103 elif self._type == 'f': 104 return "Lambda('%s', '%s')" % (self._f, self._arg)
105
106 -def expressions():
107 """Return a sequence of test expressions.""" 108 A = Lambda('a') 109 X = Lambda('x') 110 Y = Lambda('y') 111 Z = Lambda('z') 112 XA = Lambda(X, A) 113 XY = Lambda(X, Y) 114 XZ = Lambda(X, Z) 115 YZ = Lambda(Y, Z) 116 XYZ = Lambda(XY, Z) 117 xX = Lambda('x', X) 118 xyX = Lambda('x', Lambda('y', X)) 119 xXY = Lambda('x', XY) 120 S = Lambda(xyX, A) 121 B = Lambda('x', Lambda('y', Lambda('z', Lambda(X, YZ)))) 122 C = Lambda('x', Lambda('y', Lambda('z', Lambda(XZ, Y)))) 123 O = Lambda('x', Lambda('y', XY)) 124 N = Lambda(xX, A) 125 P = Lambda(Lambda('x', XA), xX) 126 return [N, P, S]
127 128 for expr in expressions(): 129 print expr, "->", expr.simplify() 130