我想知道是否可以创建依赖于Z3Py中另一个代数数据类型的代数数据类型。
示例,假设我定义了自己的Bool数据类型,我想自己定义一个Bool列表:
from z3 import *
Bool = Datatype('Bool')
Bool.declare('TRUE')
Bool.declare('FALSE')
Bool = Bool.create()
TRUE = Bool.TRUE
FALSE = Bool.FALSE
这很好,然后:
BoolList = Datatype('BoolList')
BoolList.declare('bNIL')
BoolList.declare('bCONS', ('hd', Bool()), ('tail', BoolList))
BoolList = BoolList.create()
此操作失败并显示以下消息:
>>> BoolList.declare('bCONS', ('hd', Bool()), ('tail', BoolList))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: DatatypeSortRef instance has no __call__ method
原因是使用Bool()作为对早期定义的数据类型的引用。使用Z3 boolean排序就像魅力一样:
BoolList = Datatype('BoolList')
BoolList.declare('bNIL')
BoolList.declare('bCONS', ('hd', BoolSort()), ('tail', BoolList))
代数数据类型的定义是否不可能依赖于其他代数数据类型,或者我是否需要通过s.th.除了Bool()?
提前致谢! 卡斯滕
答案 0 :(得分:1)
好吧,事实证明我使用了括号,我不应该 - 对自定义数据类型的引用&#34; Bool&#34;不需要打电话:
BoolList.declare('bCONS', ('hd', Bool), ('tail', BoolList))
工作正常:))