def store_unique(self, pattern, item, *dict): level = self.tree for sym in pattern: if dict: term = ground(sym, dict[0])[0] else: term = sym if term != '?': if not level.has_key(term): # store const level[term] = {'.': []} # no items yet level = level[term] else: if not level.has_key('?'): # store var level['?'] = {'.': []} level = level['?'] if level['.'] != []: return 0 else: if dict: level['.'] = [substitute(item, dict[0])] else: level['.'] = [item] return 1
def store_unique(self, pattern, item, *dict): level = self.tree for sym in pattern: if dict: term = ground(sym, dict[0])[0] else: term = sym if term != '?': if not level.has_key(term): # store const level[term] = {'.':[]} # no items yet level = level[term] else: if not level.has_key('?'): # store var level['?'] = {'.':[]} level = level['?'] if level['.'] != []: return 0 else: if dict: level['.'] = [substitute(item, dict[0])] else: level['.'] = [item] return 1
def matches(self, pattern, level, dict): # ['.'] may = [] if pattern == []: # may be too long return level['.'] # may be too short else: # may not match res = [] head, tail = pattern[0], pattern[1:] if dict: head = ground(head, dict[0])[0] if head[0] != '?': if level.has_key(head): res = res + self.matches(tail, level[head], dict) if level.has_key('?'): res = res + self.matches(tail, level['?'], dict) else: for x in level.keys(): if x != '.': res = res + self.matches(tail, level[x], dict) return res