2015-09-22 70 views
1

根據關於logic package的sympy文檔,我們可以使用to_cnf/to_dnfsimplify_logic(expr, form='cnf'/'dnf')將任意布爾表達式轉換爲DNF/CNF格式。如何在sympy中獲取DNF/CNF表達式的子句?

但之後,如何從結果中獲得子句?

我們可以嘗試使用args字段。但使用它非常不方便。例如,如果你將一個簡單的表達式如~a轉換爲CNF/DNF,那麼你會得到~a作爲結果,然後調用(~a).args返回(),這不是所要求的子句! (當然,我可以用if檢查解決,但這很難看)

回答

1

我找不到sympy中的本地方法,但是我寫錯了使用args寫的很醜。這是解決方案。

def clauses(expr) -> tuple: # for DNFs only 
    if not isinstance(expr, sympy.logic.boolalg.Or): 
     return expr, 
    return expr.args 

巴黎的功能真/假值返回(true,)/(false,)。對於CNF,更改爲isinstance(expr, And)