decreases
Source: compiler/src/builtin_docs/keywords.md States an int that every iteration of a while loop makes smaller, without going negative.
It proves the loop ends; a violation panics with (went negative) or
(did not decrease). Contextual: only a keyword in a while header.
fn sum_to(int n) -> int {
let i = 0;
let s = 0;
while i < n
decreases n - i
{
s = s + i;
i = i + 1;
}
return s;
}
See also#
intfn: Declares a function, a method, or (written in an expression) an anonymous function.let: Declares a mutable local variable.const: Declares a binding that cannot be reassigned: a local, a module constant, or a class field that is set only bynew.static: Declares a module-level or class-level slot shared by the whole program, or a method withoutself.readonly: A read-only view of a value: nothing reachable through it can be changed.if: Runs a block when aboolcondition is true.else: Introduces the branch of anifthat runs when its condition is false (or its pattern does not match).