Как переместить связанный список в моем использовании посткодирования через цикл в Eiffel?

Я пытаюсь использовать через 1|..|list.count как j all list.i_th(z) ~ old list.i_th(z) end

но это говорит неизвестный идентификатор z. Что не так с этим синтаксисом??

1 ответ

Решение

Синтаксис правильный. Тем не менее, нет идентификатора имени z объявляется, следовательно ошибка. Есть переменная курсора j вместо. К элементам в текущей позиции курсора обращаются с помощью j.item,

Другая проблема заключается в том, что j оценивается в текущем контексте (постусловии), но старые выражения оцениваются до выполнения тела объекта, где j отсутствует. В результате код с old list.i_th (j.item) не будет компилироваться. Другими словами, значение должно быть взято из старого списка, но с текущим индексом. Выражение (old list).i_th (j.item) делает трюк.

Но это все равно не делает то, что нужно. Оказывается, что old list = list потому что ссылка на объект списка остается прежней. Чтобы получить старые элементы, вместо этого требуется копия списка: (old list.twin),

Сочетая все вышесказанное, выражение должно выглядеть так across 1 |..| list.count as j all list.i_th (j.item) ~ (old list.twin).i_th (j.item) end,

Другие вопросы по тегам