Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Языки логического программирования. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
где транспонирует 2-ю матрицу
а сначала расписывает для каждой строки 1-й матрицы всю 2-ю матрицу, и затем из каждой пары (строка, матрица) получает необходимый кортеж (строка, строка) расписыванием слева
Подставляя все введенные промежуточные функции, получим окончательное определение функции перемножения матриц:
В полученной программе нет ничего лишнего: структура программы­формулы получена из постановки задачи; имеется концептуальная ясность всех конструкций, входящих в формулу.
Программа не сразу понятна, так как новый стиль усваивается не сразу, но такой подход стоит усилий. В отличие от языков фон Неймановского типа нет промежуточных данных, нет переменных, нет управляющих конструкций, нет процедур, нет инициализации.
Зато есть концептуальная ясность, есть обобщенность, есть возможность распараллелить процесс (вычисление скалярных произведений), а также есть возможность оптимизации: скалярные произведения можно вычислять не параллельно, а последовательно, не требуя большой промежуточной памяти для вычислений.
Стиль ориентирован на концептуальную ясность программы и предполагает поэтому при разработке концентрацию внимания на решаемой задаче и игнорирование второстепенных пока вопросов, связанных, например, с необходимыми ресурсами. Когда решение найдено и оно не устраивает по каким-то свойствам (например, по ресурсоемкости), можно сосредоточить дальнейшие усилия на постановке и решении новой задачи, для чего проводится также пошаговая детализация в поиске оптимизации.
Языки логического программированияВ.С. Рублев
121
Проанализируем полученное решение умножения матриц с целью оптимизации. Прежде всего, мы видим, что требует много памяти:
1. во-первых, при подготовке матрицы пар каждый элемент 1-й
матрицы расписывается со всей 2-й матрицей; это требует памяти для элементов;
2. во-вторых, сама матрица пар содержит пар из
элементов, т. е. требует объем памяти для элементов.
Улучшение программы, связанное с экономией памяти, никак не должно изменить ее первую часть - подготовку транспонированием 2-й матрицы. Поэтому мы будем изменять программу в остальной ее части,
которую назовем :
Основная идея состоит в перемножении строки 1-й матрицы на 2-ю матрицу (образование строки результирующей матрицы). Тогда последующие строки можно перемножить на месте, освободившемся после перемножения предыдущих строк. Объем памяти, требующийся
для этого, равен т. е. меньше по крайней мере в
раз, что существенно. Для этого мы сначала определим программу
умножения 1-й строки 1-й матрицы на 2-ю матрицу:
Определим программу :
Если удастся доказать эквивалентность программ и то в
определении программы можно будет заменить на :
что дает рекурсивное определение программы перемножения
Языки логического программированияВ.С. Рублев
122
матриц. В определении отсутствует двойная общая аппликация, и при разумном порядке выполнения конструкции в (сначала левый операнд, а затем правый) строки результирующей матрицы можно последовательно вычислять на одном и том же месте.
Таким образом, для верификации программы (доказательства ее
корректности) нужно показать, что Могут быть разные способы такого доказательства, но нас будет интересовать алгебраический подход к доказательству эквивалентности программ.
Теорема 2.
Доказательство. Рассмотрим 2 случая:
1. 1-я матрица пуста ;
2. 1-я матрица не пуста
Надо доказать:
В этом случае где
- по
определению Распишем Тогда
Языки логического программированияВ.С. Рублев
123
Из аксиомы следует так
как Поэтому при таких обозначениях
И потому из аксиомы
следует
Из теоремы 1 следует Теорема доказана.
Упражнения
1. Упростите формулу алгебры программ:
где - селектор
выбора -го элемента кортежа.
2. Упростите формулу алгебры программ:
где - селектор выбора
-го элемента кортежа.
Языки логического программированияВ.С. Рублев
124

Список литературы

1. Марков, А. А, Теория алгорифмов, М., 1954. (Труды МИАН. Т. 42.)
2. Марков, А. А, Н. И. Нагорный, Теория алгоритмов, М., 1984
3. Мендельсон, Э, Введение в математическую логику и теорию алгоритмов, М., 1985
4. Новиков, Н. С, Элементы теории алгоритмов, М., 1987
5. Turchin, V. F, Refal-5, Programming Guide and Reference Manual , New England Publishing Co., Holyoke, 1989
6. Базисный Рефал и его реализация на вычислительных машинах, М.: ЦНИПИАСС,
1977. - 258 с
7. Климов, Ан. В, С. А. Романенко, Система программирования Рефал-2 для ЕС ЭВМ. Описание входного языка, М.: ИПМ им. М. В. Келдыша АН СССР, 1987. - 52 с
8. Романенко, С. А, Реализация Рефала-2, М.: ИПМ им. М. В. Келдыша АН СССР, 1977. ­191 с
9. Романенко, С. А, Рефал-4 - расширение Рефала-2, обеспечивающее выразимость результатов прогонки, М.: ИПМ им. М. В. Келдыша АН СССР, 1987, препринт N 147. ­27 с
10. Турчин, В. Ф, Феномен науки: кибернетический подход к эволюции, М.: ЭТС, 2000.
- 368 с
11. Стерлинг, Л, Э. Шапиро, Искусство програм мирования на языке Пролог, М.: Мир,
1990. - 334 с
12. Доорс, Дж, А. Р. Рейблейн, С. Вадера, ПРОЛОГ - язык программирования будущего, М.: Финансы и статистика, 1990. - 144 с
13. Янсон, А, Турбо-Пролог в сжатом изложении, М.: Мир, 1991. - 96 с
14. Clocksin, W.F, C.S. Mellish, Programming in Prolog,2nd Edition, Springer-Verlag, New York, 1984
15. Backus, J, Can Programming Be Liberated from von Neyman Style? A Functional Style and Its Algebra of Programs, CACM, 1978, 21, n.8, P. 613-641
16. Кауфман, В.Ш, Языки программирования. Методические реком ендации М.00.279­87, М.: МГУ, НПО "Центрпрограммсистем": Калинин, 1988. 290 с
Языки логического программированияВ.С. Рублев
125
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]