Опубликован: 19.03.2004 | Доступ: платный | Студентов: 11 / 0 | Оценка: 3.98 / 3.79 | Длительность: 17:50:00
ISBN: 978-5-9556-0008-6
Лекция 4:

Отображения и функционалы

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Аннотация: Программирование отображений и использование функционалов демонстрируется как метод резкого повышения производительности программирования и эффективности отладки программ. Изучается механизм безымянных определений. Рассматриваются разные схемы отображений аргументов и формирования результатов на основе отображающих функций над компонентами структур данных и определения различных функциональных схем переработки данных.

Отображения структур данных и функционалы

Отображения обычно используются при анализе и обработке данных, представляющих информацию разной природы. Вычисление, кодирование, трансляция, распознавание - каждый из таких процессов использует исходное множество цифр, шаблонов, текстов, идентификаторов, по которым конкретная отображающая функция находит пронумерованный объект, строит закодированный текст, выделяет идентифицированный фрагмент, получает зашифрованное сообщение. Таким образом работает любое введение обозначений - от знака происходит переход к его смыслу.

Отображения - ключевой механизм информатики. Построение любой информационной системы сопровождается определением и реализацией большого числа отображений. Сначала выбираются данные, с помощью которых представляется информация. В результате по данным можно восстановить представленную ими информацию - извлечь информацию из данных (по записи числа восстановить его величину). Потом конструируется набор структур, достаточный для размещения и обработки данных и программ в памяти компьютера (по коду команды можно выбрать хранимую в памяти подпрограмму, которая построит новые коды чисел или структур данных).

Говорят, что отображение существует, если задана пара множеств и отображающая функция, для которой первое множество - область определения, а второе - область значения. При определении отображений, прежде всего, должны быть ясны следующие вопросы:

  • что представляет собой отображающая функция ;
  • как организовано данное, представляющее отображаемое множество;
  • каким способом выделяются элементы отображаемого множества, передаваемые в качестве аргументов отображающей функции.

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

Проще всего выработать структуру множества результатов, подобную исходной структуре. Но возможно не все полученные результаты нужны или требуется собрать их в иную структуру, поэтому целесообразно прояснить заранее еще ряд вопросов:

  • где размещается множество полученных результатов;
  • чем отличаются нужные результаты от полученных попутно;
  • как строится итоговое данное из отобранных результатов.

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

Функции, выполняющие конкретные роли, могут быть достаточно общими, полезными при определении разных отображений, - они получают имена для многократного использования в разных системах определений. Но могут быть и разовыми, нужными лишь в данном конкретном случае - тогда можно обойтись без их имен, использовать определение непосредственно в точке вызова функции. Таким образом, определение отображения может быть разбито на части (функции и функционалы ) разного назначения, типичного для многих схем информационной обработки. Это позволяет упрощать отладку систем определений, повышать коэффициент повторного использования отлаженных функций. Можно сказать, что отображения - эффективный механизм абстрагирования, моделирования, проектирования и формализации крупномасштабной обработки информации. Возможности отображений в информатике значительно шире, чем освоено практическим программированием, но их применение требует дополнительных пояснений, которые и являются предметом этой лекции.

Числа и мультиоперации

Любую информацию можно представить в виде символьных выражений. В качестве основных видов символьных выражений выбраны списки и атомы.

Атом - неделимое данное, представляющее информацию произвольной природы.

Во многих случаях знание природы информации дает более четкое понимание особенностей изучаемых механизмов. Программирование работы с числами и строками - привычная, хорошо освоенная область информационной обработки, удобная для оценки преимуществ использования функционалов. Опуская технические подробности, просто отметим, что числа и строки рассматриваются как самоопределимые атомы, смысл которых не требует никакого ассоциирования, он понятен просто по виду записи.

Например, натуральные числа записываются без особенностей и могут быть почти произвольной длины:

1
123
9876543210000000000000123456789

Можно работать с дробными и вещественными числами:

2/3
3.1415926

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

Список - составное данное, первый элемент которого может рассматриваться как функция, применяемая к остальным элементам, также представленным как символьные выражения. Это относится и к операциям над числами и строками:

(+ 1 2 3 4 5 6) ;= 21 
(- 12 6 3) ;= 3
(/ 3 5) ;= 3/5
(1+ 3) ;= 4

Большинство операций над числами при префиксной записи естественно рассматривать как мультиоперации от произвольного числа аргументов.

(string-equal "строка 1" "строка1") ;= Nil
(ATOM "a+b-c") ;= T
(char "стр1" 4 ) ;= "1"

Со строками при необходимости можно работать посимвольно, хотя они рассматриваются как атомы.

Любой список можно превратить в константу, поставив перед ним <'> апостроф. Это эквивалентно записи со специальной функцией QUOTE. Для чисел и строк в этом нет необходимости, но это не запрещено.

'1 ;= 1
'"abc" ;= "abc"

Можно строить композиции функций. Ветвления представлены как результат специальной функции COND, использующей отличие от NIL в качестве значения "истина". Числа и строки таким образом оказываются допустимыми представлениями значения "истина". Отказ от барьера между представлениями функций и значений дает возможность использовать символьные выражения как для изображения заданных значений, включая любые структуры над числами и строками, так и для определения функций, обрабатывающих любые данные. (Напоминаем, что определение функции - данное.) Функционалы - это функции, которые используют в качестве аргументов или результатов другие функции. При построении функционалов переменные могут играть роль имен функций, определения которых находятся во внешних формулах, использующих функционалы .

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?

Алина Ленкова
Алина Ленкова
Россия, Ставрополь, СФ МГУПИ, 2014
Валерий Ромашов
Валерий Ромашов
Россия