1、首先,如图这段代码定义了一个名为expr的表达式,并且使用print_expr函数来显示表达式的详细信息。
2、执行结果如图所示,通过该例子可以知晓如何获取运算符,参数个数,以及参数(子表达式)等。
3、如图编写了一个visit_expr函数,用于递归地访问表达式,并显示各个子表达式的信息。
4、运行效果如图所示,从上到下为从叶节点到根节点。注意到Not/And的操作符名称是对应的小写not和and。
5、编写如图一个简单的函数,用于手动将一个表达式变换为原来的非(将And变为Or,并将各个子式变为原来的非)。
6、使用所编写的求函数,构造出一个新的表达式打印如图。注意不等号操作符名称为distinct,而等号屏顿幂垂==的名称是=。
7、我们可以用ctx-solver-simplify用求解器进行化简,可以看到表达式取反的结果是正确的。