Автор Тема: [Oberon 07/13] Семантика FOR  (Прочитано 18914 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
[Oberon 07/13] Семантика FOR
« : Ноябрь 26, 2013, 02:25:17 pm »
Склоняюсь к мысли, что семантика цикла FOR должна быть примерно как в Ada/Lua, т.е.:
1. Переменную цикла запрещено объявлять в секции VAR (соответственно запрещено перекрытие имен)
2. Тип всегда INTEGER;
3. Область действия переменной - тело цикла.
4. Переменная доступна только для чтения.

Кто что думает на этот счет?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #1 : Ноябрь 26, 2013, 02:52:22 pm »
Кто что думает на этот счет?

Согласен. Хотя специализированные варианты (foreach) все равно лучше :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #2 : Ноябрь 26, 2013, 03:15:56 pm »
Эмм... Вообще говоря да, такой цикл отлично заменяется на foreach, ибо является его частным случаем.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #3 : Ноябрь 26, 2013, 03:46:35 pm »
Эмм... Вообще говоря да, такой цикл отлично заменяется на foreach, ибо является его частным случаем.

Да, цикл отсюда и до туда с read-only пемеренной - 99%, что писатель просто хотел пройтись по всем элементам (целочисленная переменная здесь в роли итератора), т.е. классический foreach.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #4 : Ноябрь 26, 2013, 03:50:28 pm »
Эмм... Вообще говоря да, такой цикл отлично заменяется на foreach, ибо является его частным случаем.

Да, цикл отсюда и до туда с read-only пемеренной - 99%, что писатель просто хотел пройтись по всем элементам (целочисленная переменная здесь в роли итератора), т.е. классический foreach.
А если ему нужны индексы, то это тоже foreach только уже не по коллекции, а по целочисленному типу (enum, или range какой).
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon 07/13] Семантика FOR
« Ответ #5 : Ноябрь 26, 2013, 04:35:01 pm »
Т.е. вместо модификации FOR, предлагаете воткнуть foreach, а вместе с ним итераторы, коллекции, диапазоны и т.д...?  :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #6 : Ноябрь 26, 2013, 04:47:20 pm »
Цикл for в таком виде нинужен. Если уж и делать цикл for, так в сишном варианте.
Очень удобно, например, делать так:
for (table->begin(); ~table->eof(); table->next())
{
...
}
чем вот так:table->begin();
while (~table->eof())
{
...
    table->next();
}

А если в стиле Ады -- то да, это просто foreach с перебором коллекции (в том числе ленивой) или итератором (имитатором ленивой коллекции)...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon 07/13] Семантика FOR
« Ответ #7 : Ноябрь 26, 2013, 05:00:24 pm »
А чем for лучше while в твоем примере? Вроде те же яйца, только в профиль.  ;)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #8 : Ноябрь 26, 2013, 05:07:08 pm »
Т.е. вместо модификации FOR, предлагаете воткнуть foreach, а вместе с ним итераторы, коллекции, диапазоны и т.д...?  :)
Итераторы, коллекции и диапазоны - это же не языковые фичи :-) C итераторами работает обычный for, при чем тут foreach?

for(itr = mymap.begin(); itr != mymap.end(); ++itr) {
    // some code here
}

Всё явно, обычный for (а можно и while), никаких форычей.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #9 : Ноябрь 26, 2013, 05:07:36 pm »
А чем for лучше while в твоем примере? Вроде те же яйца, только в профиль.  ;)

Тем что в нём инициализация цикла, условие его завершение и действие по его продвижению вперёд -- всё на виду, в одной строке, сразу всё понятно.
while'же размывает этот цикл на как минимум две части...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon 07/13] Семантика FOR
« Ответ #10 : Ноябрь 26, 2013, 05:40:25 pm »
Т.е. вместо модификации FOR, предлагаете воткнуть foreach, а вместе с ним итераторы, коллекции, диапазоны и т.д...?  :)
Итераторы, коллекции и диапазоны - это же не языковые фичи :-) C итераторами работает обычный for, при чем тут foreach?

Чтобы сделать foreach как в Lua или там питоне, придется ввести в язык либо поддержку итераторов (ибо форыч должен что-то вызывать, и это что-то должно помнить на каком оно элементе находится), либо ФВП с замыканиями.

for item in collection do
...
end

что такое "collection"?  :)

for(itr = mymap.begin(); itr != mymap.end(); ++itr) {
    // some code here
}

Всё явно, обычный for (а можно и while), никаких форычей.

Ну я уже высказывался что while спокойно заменяет форыч  :)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon 07/13] Семантика FOR
« Ответ #11 : Ноябрь 26, 2013, 05:43:30 pm »
Тем что в нём инициализация цикла, условие его завершение и действие по его продвижению вперёд -- всё на виду, в одной строке, сразу всё понятно.
while'же размывает этот цикл на как минимум две части...
Да, тут for несколько выигрывает.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #12 : Ноябрь 26, 2013, 05:55:12 pm »
Т.е. вместо модификации FOR, предлагаете воткнуть foreach, а вместе с ним итераторы, коллекции, диапазоны и т.д...?  :)
Итераторы, коллекции и диапазоны - это же не языковые фичи :-) C итераторами работает обычный for, при чем тут foreach?

Чтобы сделать foreach как в Lua или там питоне, придется ввести в язык либо поддержку итераторов (ибо форыч должен что-то вызывать, и это что-то должно помнить на каком оно элементе находится), либо ФВП с замыканиями.

for item in collection do
...
end

что такое "collection"?  :)
Ну, если уж ты говоришь про Аду и противопоставляешь это дело форычу, то скажи ка, как на Обероне будет выглядеть вот это (это чисто Адские форы):
for Count in List loop
    Put (Count);
end loop;

Ну или такое:
for Count in My_Array_Var'Range loop
    ...
end loop;

Чтобы и сделать нормальный форыч и сделать нормальный For из Ады, нужно существенно поменять язык.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon 07/13] Семантика FOR
« Ответ #13 : Ноябрь 26, 2013, 06:06:32 pm »
Ну я уже высказывался что while спокойно заменяет форыч  :)

Ага, а if-goto спокойно заменяет while...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: [Oberon 07/13] Семантика FOR
« Ответ #14 : Ноябрь 26, 2013, 06:57:03 pm »
for Count in List loop
    Put (Count);
end loop;
Разве в Аде есть форыч?   ???

Я думал это обычный for.
А что такое тут List?