1 from logic import FolKB, fol_bc_ask, expr, is_definite_clause, variables
2
3 import random
4 import string
5 import types
6
9
15
17 - def tell(self, sentence):
18 if issubclass(sentence.__class__,str):
19 sentence = expr(sentence)
20 if is_definite_clause(sentence):
21 self.clauses.append(sentence)
22 else:
23 raise Exception("Not a definite clause: %s" % sentence)
24
26 if issubclass(sentence.__class__,str):
27 sentence = expr(sentence)
28 self.clauses.remove(sentence)
29
31 e = expr(q)
32 vars = variables(e)
33 ans = fol_bc_ask(self, [e])
34 res = []
35 for a in ans:
36 res.append(dict([(x, v) for (x, v) in a.items() if x in vars]))
37 res.sort(key=str)
38
39 if res==[]: return False
40 for r in res:
41 if r!={}:
42 return res
43 return True
44
46 key = key.capitalize()
47 if issubclass(value.__class__, str):
48 self.tell("Var("+key+","+value.capitalize()+",Str)")
49
50 elif issubclass(value.__class__,int):
51 self.tell("Var("+key+","+str(value)+",Int)")
52
53 elif issubclass(value.__class__,float):
54 self.tell("Var("+key+","+str(value) + ",Float)")
55
56 elif issubclass(value.__class__,list):
57 listID = ''.join(random.choice(string.ascii_uppercase+string.ascii_lowercase) for x in range(8))
58 listID = listID.capitalize()
59 for elem in value:
60 self._encode(listID, elem)
61 self.tell("Var("+ key + ","+ listID +",List)")
62
63 elif issubclass(value.__class__,dict):
64 dictID = ''.join(random.choice(string.ascii_uppercase+string.ascii_lowercase) for x in range(8))
65 dictID = dictID.capitalize()
66 for k,v in value.items():
67 elemID = ''.join(random.choice(string.ascii_uppercase+string.ascii_lowercase) for x in range(8))
68 elemID = elemID.capitalize()
69 self._encode(elemID+"Key",k)
70 self._encode(elemID+"Value",v)
71 self.tell("Pair("+dictID+","+elemID+")")
72 self.tell("Var("+key+","+dictID+",Dict)")
73
74 else:
75 raise KBValueNotKnown
76
78 gen = self._gen_decode(key)
79 try:
80 return gen.next()
81 except StopIteration:
82 return None
83
85 key = key.capitalize()
86 results = self.ask("Var("+key+", value, type)")
87 if type(results)==types.BooleanType:
88 yield None
89 for res in results:
90 value = str(res[expr("value")])
91 typ = str(res[expr("type")])
92
93 if typ == "Int": yield int(value)
94 elif typ == "Str": yield str(value).lower()
95 elif typ == "Float": yield float(value)
96 elif typ == "List":
97 l = []
98 listID = str(value)
99 gen = self._gen_decode(listID)
100 hasElements=True
101 while hasElements:
102 try:
103 l.append(gen.next())
104 except:
105 hasElements=False
106 yield l
107 elif typ == "Dict":
108 dictID = str(value)
109 d = {}
110 for i in self.ask("Pair("+dictID+", elemid)"):
111 elemID = str(i[expr("elemid")])
112 newkey = self._gen_decode(elemID+"Key").next()
113 newvalue = self._gen_decode(elemID+"Value").next()
114 d[newkey] = newvalue
115 yield d
116
117
118
119
121
123 self.kb = SpadeKB()
124 self.type = "Spade"
125
156
157 - def tell(self, sentence):
158 return self.kb.tell(sentence)
159
162
163 - def ask(self, sentence):
164 return self.kb.ask(sentence)
165
166 - def set(self, key, value):
171
172 - def get(self, key):
174
175
176 if __name__ == "__main__":
177
178 kb0 = KB()
179
180 kb0.set("varname1",1234)
181 a = kb0.get("varname1")
182 print a, a.__class__
183
184 kb0.set("varname2","myString")
185 a = kb0.get("varname2")
186 print a, a.__class__
187
188 kb0.set("varname3",1.34)
189 a = kb0.get("varname3")
190 print a, a.__class__
191
192
193 kb0.set("varname4",[5,6,7,8])
194 a = kb0.get("varname4")
195 print a, a.__class__
196
197 kb0.set("varname5",[5,6.23,"7",[8,9]])
198 a = kb0.get("varname5")
199 print a, a.__class__
200
201 kb0.set("varname6",{'a':123,'b':456,789:"c"})
202 a = kb0.get("varname6")
203 print a, a.__class__
204
205 kb0.set("varname7",{'a':[123.25],'b':[4,5,6],789:{'a':1,'b':2}})
206 a = kb0.get("varname7")
207 print a, a.__class__
208
209 try:
210 kb0.set(123,"newvalue")
211 except KBNameNotString:
212 print "Test KBNameNotString passed."
213
214
216 try:
217 kb0.set("i8", A())
218 except KBValueNotKnown:
219 print "Test KBValueNotKnown passed."
220
221
222 a = kb0.get("varname9")
223 print a, a.__class__
224
225
226