procedure Op (Container : in Container_Type) is
C : Cursor := Container.Last; -- factory
E : Element_Type;
begin
while Has_Element (C) loop
E := Element (C);
exit when Predicate (E);
Do_Something (E);
Previous (C); --or: C := Previous (C);
end loop;
end Op;