看起来内置的布尔运算符不是Dafny中的第一类函数,因为下面的代码不能编译。我错过了什么吗?作为解决方法,我假设我们可以在自己的函数中包含内置函数。
datatype binOp = X
function evalOp(o: binOp): bool -> bool
{
match o
{
case X => &&
}
}
顺便说一句,错误消息是“无效的UnaryExpression”。
答案 0 :(得分:1)
不,Dafny不会将&&
之类的运算符视为函数值。
正如您所猜测的,您可以包装运算符以创建函数。在您的示例中,这样的事情可能会起作用。
case X => (x, y) => x && y
如果您计划大量使用该功能,您可能更愿意为其命名。