def tryKB(label, base):
    kbString = base['kb']
    kb = FolKB([])
    for kbLine in kbString.split('\n'):
        s = kbLine.strip()
        if len(s) == 0:
            continue
        if (s[0] == '#'):
            continue
        try:
            sentence = expr(s)
            kb.tell(sentence)
        except:
            traceback.print_exc()
    printKB(label, kb)
    print(indent(2), 'queries:')
    queryString = base['queries']
    for qLine in queryString.split('\n'):
        s = qLine.strip()
        if len(s) == 0:
            continue
        if (s[0] == '#'):
            continue
        try:
            query = expr(s)
            generator = kb.ask_generator(query)
            print(indent(3), str(query) + '?', end=' ')
            if 'limit' in base:
                printResults(query, generator, base['limit'])
            else:
                printResults(query, generator)
        except:
            traceback.print_exc()
def tryKB(label, base):
    kb = FolKB([])

    # define the Differ predicate,
    # e.g., Differ(A, B), Differ(B, C), ...
    if 'Differ' in base:
        objString = base['Differ']
        objects = []
        for obj in objString.split(','):
            obj = obj.strip(' \t\n\r')
            if obj == '':
                continue
            if obj[0] == '#':
                continue
            objects.append(obj)
        for ob1 in objects:
            for ob2 in objects:
                if ob1 == ob2:
                    continue
                s = 'Differ(' + ob1 + ', ' + ob2 + ')'
                try:
                    sentence = expr(s)
                    kb.tell(sentence)
                except:
                    traceback.print_exc()

    # read facts and rules
    kbString = base['kb']
    for kbLine in kbString.split('\n'):
        s = kbLine.strip()
        if len(s) == 0:
            continue
        if (s[0] == '#'):
            continue
        try:
            sentence = expr(s)
            kb.tell(sentence)
        except:
            traceback.print_exc()
    printKB(label, kb)

    # now, ask some questions
    print(indent(2), 'queries:')
    queryString = base['queries']
    for qLine in queryString.split('\n'):
        s = qLine.strip()
        if len(s) == 0:
            continue
        if (s[0] == '#'):
            continue
        try:
            query = expr(s)
            generator = kb.ask_generator(query)
            print(indent(3), str(query) + '?', end=' ')
            if 'limit' in base:
                printResults(query, generator, base['limit'])
            else:
                printResults(query, generator)
        except:
            traceback.print_exc()