Почему мой `recursive_print_proof` не работает? - PullRequest
0 голосов
/ 17 июня 2020

Для задания нам пришлось написать код Python, который выполняет разрешение по пропозициональной логике c КБ.

Кажется, весь код работает нормально, за исключением recursive_print_proof. При запуске программы она будет работать до тех пор, пока вы не скажете ей остановиться.

То, что она должна сделать, - это вывести доказательство, основанное на разрешении. Однако, похоже, он застревает в al oop.

Надеюсь, кто-нибудь может мне помочь.

recursive_print_proof можно найти почти в конце. Мой код:

def recursive_print_proof(idx, clause_set):
    kb = init()
    if contains_empty_clause(kb):
        inferred = []
        for i in range(len(kb)):
            for j in range(i,len(kb)):
                if can_resolve(kb[i],kb[j]):
                    resolvent = resolve_clauses(kb[i],kb[j])
                    inferred.append(resolvent)
                    if clause_set[idx].equals(resolvent):
                        idx2 = find_index_of_clause(kb[j],clause_set)
                        recursive_print_proof(idx2,clause_set)
                        idx2 = find_index_of_clause(kb[i],clause_set)
                        recursive_print_proof(idx2,clause_set)
                        # printing
                        clause_set[idx].print_clause()
                        print(" is inferred from", end=" ")
                        kb[i].print_clause()
                        print(" and", end=" ")
                        kb[j].print_clause()
                        print(".")
                        break
                    break
                break

1 Ответ

1 голос
/ 17 июня 2020

Если вы хотите знать, почему код крутится в recursive_print_proof ...

, ваш recursive_print_proof метод зацикливается на условии while not contains_empty_clause(kb):, которое никогда не будет ложным. Так что он продолжает вращаться.

Возможно, вы хотите, чтобы это было if not contains_empty_clause(kb):?

...