Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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