为什么我的`recursive_print_proof`不能用?

问题描述 投票:0回答:1

在一次作业中,我们必须编写Python代码,对一个命题逻辑KB进行解析。

所有的代码似乎都能正常工作,除了下面的 recursive_print_proof. 当运行程序时,它会一直运行,直到你让它停止。

它应该做的是根据分辨率输出一个证明。然而,它似乎陷入了一个循环。

希望有人能帮助我。

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

python loops logic infinite-loop propositional-calculus
1个回答
1
投票

如果你想知道为什么代码会在 recursive_print_proof...

你的 recursive_print_proof 方法循环 while not contains_empty_clause(kb): 这永远不会是假的。所以它一直在旋转。

也许你希望它是 if not contains_empty_clause(kb): ?

© www.soinside.com 2019 - 2024. All rights reserved.