2016-03-17 11 views
0

Петля в Eiffel следующий формат:Транслейтинг Eiffel петли для языков, которые не поддерживают инвариантов цикла/варианты

from 
    Init 
invariant 
    Invariant 
until 
    Exit 
variant 
    Variant 
loop 
    Body 
end 

Как бы вы перевести выше Эйфелеву псевдо-кода на языке, который не поддерживает инвариантов цикла/варианты? Предположим, что такой целевой язык имеет команду assert для проверки инварианта/варианта.

ответ

2

Это будет выглядеть так:

Init 
last := infinity 
loop 
    assert (Invariant) 
    next := Variant 
    assert (0 <= next and next < last) 
    last := next 
    if Exit then 
     break 
    end 
    Body 
end 
+0

Извините: не 'Variant' предикат как' Invariant'? – Elena

+0

@Elena, 'Variant' - выражение целочисленного типа. Существует тег, связанный с ним, как и с другими утверждениями, но, в отличие от других утверждений, он не является булевым. –

+0

Итак, в основном Эйфель проверяет, что 'Variant' уменьшается на каждой итерации, оставаясь неотрицательной, не так ли? – Elena