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

UptoLike

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

35
9. Записи
Запись в Icon'еименованная структура, состоящая из мно-
жества полей. Записи объявляются на самом верхнем уровне, как
глобальные объекты или функции.
Объявление записи: record r(f1,f2,f3,f4,...), где r – имя записи,
f1,f2,f3,f4,... – имена полей записи.
r является и конструктом записей. Запись в любом месте
программы (очевидно, в пределах какой-либо процедуры) создает-
ся следующим образом rec:=r(a,b,c,d,...). В
данном случае a,b,c,d,...
конкретные начения полей.
Доступ к полю записи: r.f2 или r.f3. Если f3 – список, то дос-
туп к элементу списка: r.f3[i].
Но имя поля можно рассматривать как ключ таблицы
, и
тогда функционально аналогичным выражением будет r["f3"][i].
Возможно и такое выражение pole:=r[2], эквивалентное
pole:=r.f2 и pole:=r["f2"]
Очевидным образом к записям применяются уже знакомые
нам операции (*,!,?) и функция copy.
Приведем пример
, в котором процедуре передаются значе-
ния полей записи:
record r(nb,name)
procedure main()
r1:=r(1,"JOHN")
every proc_print(!r1)
end
procedure proc_print(I)
write(I)
end
36
10. Процедуры
10.1. Вызов процедур
Наиболее общая форма вызова процедуры:
(e0)(e1,e2,...,eN), где:
e0 – выражение, вычисляющее имя процедуры, а e1,e2,...,eN
выражения, вычисляющие фактические параметры.
Пример
invocable "proc1"
invocable "proc2"
invocable "proc3"
procedure main()
L:=["proc1","proc2","proc3"]
every i:=1 to 3 do L[i](L[i])
end
procedure proc1(X)
writes(" ",X)
end
procedure proc2(X)
writes(" ",X)
end
procedure proc3(X)
writes(" ",X)
end
Выход: proc1 proc2 proc3
procedure main()
(proc1|proc2|proc3)("O'KEY")
end
procedure proc1(X)
writes(" ",X||"&proc1")
end
                                9. Записи                                                            10. Процедуры

       Запись в Icon'е – именованная структура, состоящая из мно-               10.1. Вызов процедур
жества полей. Записи объявляются на самом верхнем уровне, как
                                                                                Наиболее общая форма вызова процедуры:
глобальные объекты или функции.
                                                                                (e0)(e1,e2,...,eN), где:
       Объявление записи: record r(f1,f2,f3,f4,...), где r – имя записи,
                                                                                e0 – выражение, вычисляющее имя процедуры, а e1,e2,...,eN
f1,f2,f3,f4,... – имена полей записи.
                                                                           – выражения, вычисляющие фактические параметры.
       r является и конструктом записей. Запись в любом месте
                                                                                Пример
программы (очевидно, в пределах какой-либо процедуры) создает-
                                                                                invocable "proc1"
ся следующим образом rec:=r(a,b,c,d,...). В данном случае a,b,c,d,...
                                                                                invocable "proc2"
конкретные начения полей.
                                                                                invocable "proc3"
       Доступ к полю записи: r.f2 или r.f3. Если f3 – список, то дос-
туп к элементу списка: r.f3[i].
                                                                                procedure main()
       Но имя поля можно рассматривать как ключ таблицы, и
                                                                                L:=["proc1","proc2","proc3"]
тогда функционально аналогичным выражением будет r["f3"][i].
                                                                                every i:=1 to 3 do L[i](L[i])
       Возможно и такое выражение pole:=r[2], эквивалентное
                                                                                end
pole:=r.f2 и pole:=r["f2"]
       Очевидным образом к записям применяются уже знакомые
                                                                                procedure proc1(X)
нам операции (*,!,?) и функция copy.
                                                                                writes(" ",X)
       Приведем пример, в котором процедуре передаются значе-
                                                                                end
ния полей записи:
       record r(nb,name)
                                                                                procedure proc2(X)
       procedure main()
                                                                                writes(" ",X)
       r1:=r(1,"JOHN")
                                                                                end
       every proc_print(!r1)
       end
                                                                                procedure proc3(X)
                                                                                writes(" ",X)
      procedure proc_print(I)
                                                                                end
      write(I)
                                                                                Выход: proc1 proc2 proc3
      end
                                                                                procedure main()
                                                                                (proc1|proc2|proc3)("O'KEY")
                                                                                end

                                                                                procedure proc1(X)
                                                                                writes(" ",X||"&proc1")
                                                                                end

                                   35                                                                      36