給定CNF中的Z3公式,是否可以使用Z3Py將其轉換爲列表列表形式?我想這樣做是爲了更方便地訪問和操作文字。如果Python是一種功能語言,我可能會做類似使用Z3Py將Z3 CNF公式轉換爲列表列表形式
def cnf2list(fm) :
match fm with
| And(P,Q) -> cnf2list(P) + cnf2list(Q)
| P -> clause2list(P)
def clause2list(fm) :
match fm with
| Or(P,Q) -> clause2list(P) + clause2list(Q)
| P -> [P]
但我不知道我可以在Python中做到這一點。是否有可能像上面那樣執行模式匹配(或者使用一些完全不同的方法)來獲得Z3 CNF公式的列表表示?
這是定製'__eq__'的必然結果。 –
根據[這些規則],列表成員資格測試'x in xs'大致等於'any(bool(x == el)for el in xs)',而bool()' (https://docs.python.org/3/reference/datamodel.html#object.__bool__)。 這種行爲當然不足以犧牲符號'=='的便利性,但我認爲可能有小的改進。考慮添加引發異常的方法'__bool__',以防止這種用法。我非常肯定,在具體布爾上下文中使用符號布爾表達式的大多數情況都是錯誤。 –
太好了,謝謝你解釋@VladShcherbina!我將繼續添加__bool__方法。 –