循環不變的你定義並不完全正確。從本質上講,只有在每次循環重複之前和之後才應該如此。 WikiPedia have nice definition。
此循環的不變量爲:the values[x] and values[x + 1] are maybe not sorted or x is the last index
在每次循環迭代之前和之後都是如此。而且它還是真正後右環與false
相結合的循環狀態:
i, temp : integer;
values : array[1..100] of integer;
x := 1;
while x < 100 loop
// the values[x] and values[x + 1] are maybe not sorted or x is the last index - true
if values[x] > values[x+1] then begin
temp := values[x];
values[x] := values[x+1];
values[x+1] := temp;
end if;
x := x + 1;
// the values[x] and values[x + 1] are maybe not sorted or x is the last index - true
end loop;
// the values[x] and values[x + 1] are maybe not sorted or x is the last index - true
// and x >= 100 - true
自然,循環不變應與循環體和要執行的任務。循環不變保證循環的每一步都有相同的條件供循環體執行。