使用 Z3 的 C++ api 创建长求和?
Create a long Sum using the C++ api of Z3?
创建具有可变数量 int
的 long Sum 的首选方法是什么?
我的猜测是这样的:
expr mk_add(expr_vector args) {
vector<Z3_ast> arr;
for (int i = 0; i < (int)args.size(); i++)
arr.push_back(args[i]);
return to_expr(args.ctx(), Z3_mk_add(args.ctx(), arr.size(), &arr[0]));
}
这是正确的吗?
是的,看起来是正确的。请记住要小心 Z3_ast
对象,因为它们的引用计数不会自动更新(这里 to_expr
应该注意这一点)。
另一个保留在 C++ API 中并且不需要笨拙翻译的解决方案是:
expr mk_add(expr_vector args) {
expr r = args[0];
for (int i = 1; i < (int)args.size(); i++)
r = to_expr(args.ctx(), r + args[i]);
return r;
}
创建具有可变数量 int
的 long Sum 的首选方法是什么?
我的猜测是这样的:
expr mk_add(expr_vector args) {
vector<Z3_ast> arr;
for (int i = 0; i < (int)args.size(); i++)
arr.push_back(args[i]);
return to_expr(args.ctx(), Z3_mk_add(args.ctx(), arr.size(), &arr[0]));
}
这是正确的吗?
是的,看起来是正确的。请记住要小心 Z3_ast
对象,因为它们的引用计数不会自动更新(这里 to_expr
应该注意这一点)。
另一个保留在 C++ API 中并且不需要笨拙翻译的解决方案是:
expr mk_add(expr_vector args) {
expr r = args[0];
for (int i = 1; i < (int)args.size(); i++)
r = to_expr(args.ctx(), r + args[i]);
return r;
}