And it is usually used in conjunction with stored_rules.
The idea is, if you are trying to do:
context.recall(a,b), and no match is found with the specific value of b, try more and more general rules.
Here is some of the python:
def label_descent(x): print("x:",x) result = [x] if x == "*": return result if x.endswith(": *"): x = x[:-3] while True: try: x,null = x.rsplit(": ",1) result.append(x + ": *") except: result.append("*") return result
eg, if you feed in this label "a: b: c: d: fred", it returns these trail labels:
a: b: c: d: fred a: b: c: d: * a: b: c: * a: b: * a: * *So given something like this:
op |a: b: c>
if that has no match, then the code next tries:
op |a: b: *>
if that has no match, then the code next tries:
op |a: *>
if that has no match, then the code next tries:
op |*>
if that has no match, then return |>.
Where we consider:
op |a: b: c>
to be a more specific rule than the more general rule:
op |a: b: *>
which is more specific than say:
op |*>
Anyway, the key code in context.recall() is (though without knowing the details of the context class it probably doesn't make a lot of sense):
match = False for trial_label in label_descent(label): if trial_label in self.known_kets: if op in self.rules[trial_label]: rule = self.rules[trial_label][op] match = True break if not match: print("recall not found") rule = ket("",0)Take home message, this thing is seriously powerful, and useful. That's it for now.
No comments:
Post a Comment