了解埃菲尔环路 variant/invariant
Understanding Eiffel loop variant/invariant
我试图建立一个结构,它自己谈论 变体 和埃菲尔环的不变量,但不理解变体部分!
from
l_array := <<1,2,30,60>>
l_index := l_array.lower
invariant
valid_local_index: l_array.valid_index (l_index) or l_index = l_array.upper + 1
until
l_index > l_array.upper
loop
l_item := l_array.item (l_index)
l_index := l_index + 1
variant
--l_index <= l_array.upper -- will never be false
--l_index -- doesnt work
end
我认为在你的情况下你想表达的作为变体的一部分是这样的
l_array.upper - l_index + 1
我试图建立一个结构,它自己谈论 变体 和埃菲尔环的不变量,但不理解变体部分!
from
l_array := <<1,2,30,60>>
l_index := l_array.lower
invariant
valid_local_index: l_array.valid_index (l_index) or l_index = l_array.upper + 1
until
l_index > l_array.upper
loop
l_item := l_array.item (l_index)
l_index := l_index + 1
variant
--l_index <= l_array.upper -- will never be false
--l_index -- doesnt work
end
我认为在你的情况下你想表达的作为变体的一部分是这样的
l_array.upper - l_index + 1