Автор Тема: Форыч в Оберонах  (Прочитано 18293 раз)

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #15 : Апрель 26, 2012, 02:25:51 pm »
Я такое определение не первый раз слышу  :)
Вот только на практике себе это представить не могу. Не встречалось мне такое ни разу.

Можете пример привести?
Это потому что еще не задумывались об этом....Пример - действия с массивом в котором элементы УПОРЯДОЧЕННЫ - и действия учитывают эту упорядоченность (явно) -
иными  словами вам ВАЖНО чтобы элементы массива перебирались, например,  в порядке возрастания....

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #16 : Апрель 26, 2012, 02:38:49 pm »
Так это как раз исключение имхо, которое спокойно пишется через WHILE.

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #17 : Апрель 26, 2012, 02:49:11 pm »
Вы нифига не читаете...  :(

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #18 : Апрель 26, 2012, 02:51:57 pm »
любой цикл (в императивном алгоритме) можно представить с помощью аналога вайла... речь не об этом...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #19 : Апрель 26, 2012, 02:54:30 pm »
Да я понял о чем вы говорите. Но приведенный вами случай очень редкий. (мне вообще не встречался) Зачем под него держать конструкцию FOR?

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #20 : Апрель 26, 2012, 02:56:54 pm »
за тем что она   привязана не к контейнеру - а  к множеству значений итератора....

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #21 : Апрель 26, 2012, 02:58:48 pm »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.
Фор удобен ,  когда алгоритм подразумевает выполнение последовательности инструкций (тело цикла)  известное (вычисляемое)  количество раз (обход элементов из некоторого  множества )- и это количество не зависит от тела цикла.. форич это подмножество фора - для алгоритмов в которых не важен порядок обхода... коряво конечно..но лень формулировать точнее...

Кстати, порядок форыч вроде как гарантирует (ибо он тупой до безобразия. по сути порядком там командует чисто сам контейнер). Его не гарантирует parallel for. Так что одно с другим путать не надо :-)

С помощью форыча отлично обходятся отсортированные массивы в нужном порядке. Собственно так их и обхожу.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Форыч в Оберонах
« Ответ #22 : Апрель 26, 2012, 03:00:21 pm »
В WHILE порядок перебора даже лучше видно на мой взгляд.

Оператор

FOR v := beg TO end BY step DO statements END

эквивалентен следующему

temp := end; v := beg;
IF step > 0 THEN
    WHILE v <= temp DO statements; v := v + step END
ELSE
    WHILE v >= temp DO statements; v := v + step END
END
http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm#9.8

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #23 : Апрель 26, 2012, 03:05:27 pm »
Наверно это мои личные предпочтения.  :)  Но я не знаю в каких случаях FOR лучше WHILE. На мой взгляд WHILE всегда удобнее, кроме случая когда нужно обойти ВЕСЬ массив. А для этого форыча достаточно. Да и по самому форычу визуально сразу понятно, что обходится весь массив.
Фор удобен ,  когда алгоритм подразумевает выполнение последовательности инструкций (тело цикла)  известное (вычисляемое)  количество раз (обход элементов из некоторого  множества )- и это количество не зависит от тела цикла.. форич это подмножество фора - для алгоритмов в которых не важен порядок обхода... коряво конечно..но лень формулировать точнее...

Кстати, порядок форыч вроде как гарантирует (ибо он тупой до безобразия. по сути порядком там командует чисто сам контейнер). Его не гарантирует parallel for. Так что одно с другим путать не надо :-)

С помощью форыча отлично обходятся отсортированные массивы в нужном порядке. Собственно так их и обхожу.
Алексей ну не путайте ТУПУЮ РЕАЛИЗАЦИЮ с ПРИНЦИПИАЛЬНОЙ НЕОПРЕДЕЛЕННОСТЬЮ  :(

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #24 : Апрель 26, 2012, 03:08:44 pm »
В WHILE порядок перебора даже лучше видно на мой взгляд.

Оператор

FOR v := beg TO end BY step DO statements END

эквивалентен следующему

temp := end; v := beg;
IF step > 0 THEN
    WHILE v <= temp DO statements; v := v + step END
ELSE
    WHILE v >= temp DO statements; v := v + step END
END
http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm#9.8
Все хватит... дело не в виде... а в том что в ГРАМОТНОЙ реализации заголовок фор вычисляется ОДИН раз... - в оберонах, как я уже сказал фор - всего лишь синтаксический сахар...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #25 : Апрель 26, 2012, 03:23:21 pm »
Кстати, порядок форыч вроде как гарантирует (ибо он тупой до безобразия. по сути порядком там командует чисто сам контейнер). Его не гарантирует parallel for. Так что одно с другим путать не надо :-)

С помощью форыча отлично обходятся отсортированные массивы в нужном порядке. Собственно так их и обхожу.
Алексей ну не путайте ТУПУЮ РЕАЛИЗАЦИЮ с ПРИНЦИПИАЛЬНОЙ НЕОПРЕДЕЛЕННОСТЬЮ  :(
Ок. Если рассуждать формально, то для начала неплохо бы дать определение цикла foreach. Четкое, точное, математичное. И уже от этого плясать. Потому как до того шел разговор исключительно о том как конкретно реализованы конструкции которые называются "foreach" во всеких разных ЯП.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #26 : Апрель 26, 2012, 03:29:06 pm »
Да запросто... выполнить некоторую последовательность действий для каждого элемента из множества, элемент берется один раз, выбор  элемента  произволен.....  надеюсь, что это определение доступно для понимания  :(.

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #27 : Апрель 26, 2012, 03:46:08 pm »
.... Потому как до того шел разговор исключительно о том как конкретно реализованы конструкции которые называются "foreach" во всеких разных ЯП.
Нет , речь не шла  о том, как  ФОР или ФОРИЧ реализованы (или нет)  в КОНКРЕТНОМ КОМПИЛЯТОРЕ оберона... а о смысловой нагрузке которую он может или должен нести... в терминах AlexUsa- о семантической нагрузке (в Оберонах она минимальна из возможных).
« Последнее редактирование: Апрель 26, 2012, 03:49:27 pm от DIzer »

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Форыч в Оберонах
« Ответ #28 : Апрель 26, 2012, 04:07:23 pm »
Цитировать
The for statement

          FOR v := beg TO end BY inc DO S END

is, if inc > 0, equivalent to

       v := beg; lim := end;
       WHILE v <= lim DO S; v := v + inc END

and if inc < 0 it is equivalent to

       v := beg; lim := end;
       WHILE v >= lim DO S; v := v + inc END

end вычисляется лишь единожды и запоминается во временной переменной. Где тут синтаксический сахар только?

DIzer

  • Гость
Re: Форыч в Оберонах
« Ответ #29 : Апрель 26, 2012, 04:22:00 pm »
В том, что Вайл по определению вычисляется каждый раз (перед каждой итерацией)... все...