终止
# 终止
Dafny中的关键字predicate
表示函数终止。
下面是一个奇偶校验的例子。对于正整数n,当n
为偶数时对n - 1
进行奇校验,当n
为奇数时对n - 1
进行偶校验。当n
减小到0时,若为偶校验调用则返回真,为奇校验调用则返回假。
predicate even(n: nat) // 偶校验
ensures even(n) <==> n % 2 == 0
{
if n == 0 then true else odd(n-1)
}
predicate odd(n: nat) //奇校验
ensures odd(n) <==> n % 2 != 0
{
if n == 0 then false else even(n-1)
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
上述两个方法缺一不可,因为它们要达到终止条件就必须互相调用直至其中一个方法递归返回。
编辑 (opens new window)
上次更新: 2022/04/06, 20:36:17