Основные элементы языка программирования Icon. Чанышев О.Г. - 9 стр.

UptoLike

Составители: 

17
2.7. Повторы с ограничением. Функция генерации после-
довательностей
Генератор «с перезарядкой» |e позволяет генерировать все
значения e, затем происходит реинициализация и процесс повто-
ряется бесконечно.
Чтобы избежать бесконечного повторения процесса, исполь-
зуется ограничитель числа повторений: |e\n.
Например: every |(writes(7))\7 выведет 7777777,
так же, как и every (writes(|7\7)), и every i:=1 to 7 do writes(7).
Специальная функция seq() предназначена для генерации
бесконечных рядов значений
seq() генерирует 1,2,3,.............
seq(i) генерирует i,i+1,i+2........
seq(i,j) генерирует i+j,i+2j,i+3j..
every writes(" ",seq(2,2)\5) выведет 2 4 6 8 10
как и every writes(" ",seq(2,2))\5
2.8. Coevaluation – «Совычисления»
В общем виде совычисления представляются так:
e0(e1,e2,...,eN),
где e0 – выражение, вычисляющее номер выражения в скоб-
ках, которое генерирует значения, и может быть переменной, зна-
чение которой есть целое число, вычисляемое где-то в другом
месте программы. Действия остальных заключаются в активации
бэктрекинга.
«Вырожденная» форма:
(e1,e2,...,eN)
эквивалентна N(e1,e2,...,eN)
или (e1&e2&...&eN).
Пример:
procedure main()
K:=1
S:="qwertyu"
every writes(" ",K(!S,1 to 3))
write()
18
every writes(" ",(!S,1 to 3))
write()
every writes(" ",(!S & 1 to 3))
end
Выход:
q q q w w w e e e r r r t t t y y y u u u
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
2.9. Множественные арифметические операции сравне-
ния
Такие операции, как a<b<c, Christopher относит к генерато-
рам. В связи с этим следует сказать об обычном в Icon'е програм-
мистском трюке. Если мы ходим выбрать наименьшее из x и y, то:
x:=x>y или x>:=y
     2.7. Повторы с ограничением. Функция генерации после-                        every writes(" ",(!S,1 to 3))
довательностей                                                                    write()
                                                                                  every writes(" ",(!S & 1 to 3))
      Генератор «с перезарядкой» |e позволяет генерировать все
                                                                                  end
значения e, затем происходит реинициализация и процесс повто-
                                                                                  Выход:
ряется бесконечно.
                                                                                  qqqwwweeerrrtttyyyuuu
      Чтобы избежать бесконечного повторения процесса, исполь-
                                                                                  123123123123123123123
зуется ограничитель числа повторений: |e\n.
                                                                                  123123123123123123123
      Например: every |(writes(7))\7 выведет 7777777,
      так же, как и every (writes(|7\7)), и every i:=1 to 7 do writes(7).
                                                                                  2.9. Множественные арифметические операции сравне-
                                                                            ния
     Специальная функция seq() предназначена для генерации
бесконечных рядов значений                                                        Такие операции, как ay или x>:=y
     every writes(" ",seq(2,2)\5) выведет 2 4 6 8 10
     как и every writes(" ",seq(2,2))\5

      2.8. Coevaluation – «Совычисления»
      В общем виде совычисления представляются так:
                            e0(e1,e2,...,eN),
      где e0 – выражение, вычисляющее номер выражения в скоб-
ках, которое генерирует значения, и может быть переменной, зна-
чение которой есть целое число, вычисляемое где-то в другом
месте программы. Действия остальных заключаются в активации
бэктрекинга.
       «Вырожденная» форма:
      (e1,e2,...,eN) эквивалентна N(e1,e2,...,eN)
      или (e1&e2&...&eN).
      Пример:
      procedure main()
      K:=1
      S:="qwertyu"
      every writes(" ",K(!S,1 to 3))
      write()

                                   17                                                                     18