Главная » Просмотр файлов » Н. Джехани - Язык Ада (1988)

Н. Джехани - Язык Ада (1988) (1160771), страница 44

Файл №1160771 Н. Джехани - Язык Ада (1988) (Н. Джехани - Язык Ада (1988)) 44 страницаН. Джехани - Язык Ада (1988) (1160771) страница 442019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 44)

ЧЕСТОК ОРЕКАТ1ОХ имеет следующую спецификацию аеаейс !уре ЕЬЕМ Ь рг!гаге; гуре 1Х))ЕХ !в (< >); -- доступны все операции дискретного типа Гуре ЧЕСТОК!в агапу(1Х))ЕХ гвп9е < >) о1 ЕЬЕМ; -- доступны такие операции над массивом,как -- идексирование и отрезки и!!)з 1аасйоа Р(А, В: 1и БЬЕМ) геазпз ЕЬЕМ; уиисйоа ЧБСТОК ОРЕКАТ10Х(А: !а ЧЕСТОК) гейер ЕЬБМ; Тело функции ЧЕСТОК ОРЕКАТ10Х имеет вид уписйоп ЧЕСТОК ОРЕКАТ10Х(А: !и ЧЕСТОК) геазга Е1.ЕМ Ь КЕЯЛ.Т: ЕЬБМ; -- массив А не должен быть пустым !гей!а КБ8()ЬТ: А(А'Р1КЗТ); йзг 1 Ь 1Х))ЕХ'ЯУСС(А'НК8Т) .. А'ЬАВТ!оор КЕ81)ЬТ: Р(КЕ81Л.Т, АИ)); ев1!оор; еай ЧЕСТОК ОРЕКАТ1ОХ; Выполняя конкретизацию ЧЕСТОК ОРЕКАТ1ОХ с различными значениями формальных параметров настройки, можно получать различные операции нвд массивами. Например, 1иисйоа МАХ РЬОАТ ЧЕСТОК Ь пеп ЧЕСТОК ОРЕКАТ10Х(ЕЬЕМ > Р.ОАТ, 1Х1)ЕХ > 1ХТЕОЕК, ЧЕСТОК > РЬОАТ АККАДА, Р > МАХ РЬОАТ); 1пис!!оп М1Х РЬОАТ ЧЕСТОК !в пеп ЧЕСТОК ОРЕКАТ10Х(ЕЬЕМ > РЬОАТ, 1ХРЕХ > 1ХТЕОЕК, ЧЕСТОК > РЬОАТ АККАДА, Р > М1Х РЬОАТ); 1ппейои ЯЗМ РЬОАТ ЧЕСТОК 1в иеп ЧЕСТОК ОРЕКАТ1ОХ(ЕЬЕМ > РЬОАТ, 1ХОЕХ > 1ХТЕОЕК, ЧЕСТОК > РЬОАТ АККАДА, Р > "+"); 'зЪЕСТОИ ОРЕИАТ!ОН реализует возможности, подобные тем, которые предоставляет оператор редукции в языке АПЛ.

Гпава в Раасйоп РКО() РЬОАТ ЧЕСТОК !в пеп ЧЕСТОК ОРЕКАТ1ОХ(ЕЬЕМ > ГЬОАТ, 1Х1)ЕХ > 1ХТЕОЕК, ЧЕСТОК > ГЬОАТ АККАДА, Р ~> "«"); Гипс!!оп ОК ВООЬЕАХ ЧЕСТОК !в пеп ЧЕСТОК ОРЕКАТ1ОХ(БЬЕМ > ВООЬЕАХ, 1Х)эЕХ > 1ХТЕОЕК, ЧЕСТОК > ВООЬЕАХ АККАДА, Р > "ог"); уппс!!оп АХЬ) ВООЬЕАХ ЧЕСТОК !в пеп ЧЕСТОК ОРЕКАТ1ОХ(ЕЬЕМ > ВООЬЕАХ, 1ХПЕХ > 1ХТЕОЕК, ЧЕСТОК > ВООЬЕАХ АККАЧ, Р > "апо"); Н.ОАТ АККАДА и ВООЬЕАХ АККАДА — это неограниченные массивы с элементами типа Н.ОАТ и ВООЬЕАХ соответственно, и в обоих случаях имеющие индексы типа 1ХТЕОЕК. Подобные операции могут быть определены и для других неограниченных массивов.

6.7.5.2. Двумерные массивы — обобщенное матричное произведение Произведением двух матриц А (размерности т х и) и В (размерности и х р) является матрица С (размерности дахр) элементы которой вычисляются как к-и С в ~з ~Ась«Вкв ь ь Ась«Вь„+Аьь+, «В„+ц+ ' ' +Аси«Вп„. где Ь и 1) верхняя и нижняя границы второго измерения матрицы А и первого измерения матрицы В соответственно (() — Ь + 1 = и). Процедура МАТ М1ЛТ, описанная в гл. 1, вычисляла вышеописанное произведение для матриц с элементами плавающего типа и с индексами только типа 1ХТЕОЕК. Для того чтобы на ее основе реализовать настраиваемую процедуру, вычисляющую обобщенное матричное произведение, необходимо абстрагироваться от типа элементов, типа индексов и операций "«" и "+".

Обобщенное матричное умножение реализуется настраиваемой процедурой ОЕХ МАТК1Х РКО1)1)СТ, которая имеет следующую спецификацию: аепег)с !уре ЕЬЕМ! в рпга!е; !уре [ХРЕХ !в (< >); !уре МАТК1Х 1в аггау(1ХРЕХ гащ!е < >, 1ХОЕХ гапКе < >) о1 ЕЬЕМ; пий зпас!1оп "+"(А, В: 1и ЕЬБМ) геаггп ЕЬЕМ !в < >; пчФа упас!!ои "«" (А, В: !а Е1.ЕМ) ге!пга Е1.ЕМ !в < >; ргосеопге ОЕХ МАТК1Х РКООЫСТ(А, В: !и МАТК1Х; С: оп! МАТК1Х); 22З Наст аиааемые мод ли Тело ОЕХ-МАТК1Х-РКО1э()СТ описывается ниже: ргосеопге ОЕХ МАТК1Х РКО1П)СТ(А, В: !и МАТК1Х; С: опГ МАТК1Х) !а -- границы массивов А, В и С должны быть правильными. -- Если необходимо, проверка должна быть произведена — до вычисления произведения матриц Ь: 1Х()ЕХ: А НККТ(2); — - индекс первого столбца А Ьей!п 1ог 1 !и С КАХОЕ(!) 1оор 1ог ) зи С КАХОЕ(2) 1оор -- инициализации С (1, Я) для произведения первой пары -- элементов. Нельзя присвоить начальное значение 0.0, -- так как тип ЕЬЕМ является настраиваемым и неизвестен -- соответствующий тип фактического параметра настройки.

— Он может быть 1ХТЕОЕК, КЕА1. или ВОО1.ЕАХ . С(1, 1): А(1, 1.) е В(Ь, 1); 1ог К в 1Х))ЕХ ЯУСС(Ь) .. А ЬАЗТ(2) 1оор С(1, У): С(1, 1) + А(1, К) е В(К, Л); спи' 1оор; епз! 1оор; ев1 1оор; епз! СЕХ МАТК1Х РКО1НЗСТ; Для того чтобы выполнить некоторые интересные операции, нужно конкретизировать настраиваемую процедуру ОЕХ МАТК1Х РКО1ШСТ. Все матрицы, используемые при конкретизации, должны иметь неограниченные типы индексов.

Описания используемых типов матриц здесь не приводятся, однако они легко определяются исходя из своих названий ". ргосеоиге Н.ОАТ МАТК)Х РКО() 1в пои ОЕХ МАТК1Х РКОР()СТ(РЬОАТ, 1ХТЕОЕК, ГЬОАТ МАТК1Х); — операции е и + над типами с плавающей точкой -- берутся из окружения ргосез!пге СОХХЕСТЕ1) 2 зя пезч ОЕХ МАТК1Х РКО()1)СТ(ВООЬЕАХ, 1ХТЕОЕК, ВОО1,ЕАХ МАТК1Х, "ог", "авГ); П Н приведенных ниже примерах обратите внимание на то, что фактические параметры настройки и фактические параметры экземпляра настраиваемой процедуры — это совершенно разные веще. Настраиваемая процедура может быть конкретизирована, но не может быть вызвана.

Экземпляр же настраиваемой процедуры может быть вызван, но его нельзя использовать для кизготовления» других экземпляров. — Прим. ред. Глава б -- если элемент РО1ХТ8(1, Я) имеет значение ТРЕШЕ, -- то точка 1 непосредственно связана с точкой 5, и РАЬ8Е -- в противном случае; тогда вызов'процедуры — СОХХЕСТЕ0 2(РО!ХТ8, РО1ХТ8, КЕЯЛ Т) будет — изменять матрицу КЕВЬ)ЬТ так, что КЕ80ЬТ(1, Я) -- будет Т1ИЗЕ если можно непосредственно попасть из точки 1 — в точку 1 или же, по крайней мере, это можно сделать через — некоторую промежуточную точку (путь длины 2).

ргоееввге 8НОКТЕВТ 018ТАХСЕ 2 !в пезв ОЕХ МАТК1Х РКО0ЫСТ(РЬОАТ, 1ХТЕОЕК, РЬОАТ МАТК1Х, М1Х, "+"); -- если элемент И, э) матрицы 0 содержит расстояние -- точки 1 от точки Л то вызов процедуры -- 8НОКТЕВТ 018ТАХСЕ 2(0, О, КЕ8()ЬТ) -- будет строить матрицы КЕ8Ь)ЬТ такую, что элемент 1, 3 этой матрицы КЕЯ)ЬТ будет содержать -- кратчайшее расстояние между 1 и 1 через, самое большее, — одну промежуточную точку (путь длины 2). В качестве примера читателю предлагается задача, в которой нужно написать настраиваемую функцию для обхода дерева в любом порядке. Предлагается использовать функцию Р в качестве одного из фактических параметров.

Различные конкретизации настраиваемой функции можно использовать для подсчета, например, числа вершин в дереве, определения его глубины, ширины и т.д. 6.7.6. Функция МАРЫЬТ Предположим, что функции над значениями типа Т необходимо расширить для обработки списков элементов типа Т. Эти расширенные функции воспринимают в качестве фактических параметров значение типа Ы8Т, которое является списком элементов типа Т и вычисляет результат типа Ы8Т. Настраиваемая функция, используемая при написании этих расширенных функций, похожа на функцию МАР1.18Т в языке программирования Лисп.

МАРЫ8Т принимает в качестве фактических параметров функцию Р и список Ь. Затем МАРЫ8Т применяет функцию Р ко всем элементам списка Ь и возвращает список результируюших значений, т.е. МАРЫ8Т (Р1) = (Р(1-1) Р(Ьз),, Р(Ьн)), где Ь вЂ” это список (Ьь Ьп, Ьн), Обычную (ненастраиваемую) функцию для МАРЫ8Т написать нельзя, так как в языке Ада подпрограммы не могут передаваться как параметры.

Тем не менее настраиваемую функцию МАРЫВТ можно написать так, что ее можно будет настроить для каждой комбинации функции Р и списка Ь. Различие между нашей функцией и соответствующей функцией языка Лисп состоит в том, что в языке Лисп функция Р не обязательно известна до времени ее выполнения, тогда как в нашем случае эта функция должна быть известна во время компиляции.

Это ограничение не является серьезной проблемой, так как функции в языке Ада Нас яваемые по ли нельзя создавать или изменять во время выполнения программы, как это возможно в языке Лисп. Более того, в языке программирования Лисп все списки принадлежат одному типу, в то время как в языке Ада они могут быть различных типов (например, с различными типами элементов) и как следствие функции МАРЫБТ необходимо конкретизировать для каждого типа списка, передаваемого как параметр. МАРЫБТ имеет следующую спецификацию: яепепс гуре ЫБТ !з рг!гаге; гуре ЕЬЕМ $к рг!гаге: пчгй $впспоп Р(Е: !и Е1.ЕМ) ге!вгп Е1.ЕМ; — функпня, которая будет расширена; — следующие операции для значения типа ЫБТ должны быть — доступны в контексте конкретизации, так как они — необходимы для расширения функции Р пйй $впсбоп НЕАО(Ь: !и ЫБТ) гегвгп Е1.ЕМ !з < >; — первый элемент списка Ь пйй ргосе$$вге А(Ю 1.АБТ(Ь: !и ов$1.1БТ; Х: !и ЕЬЕМ) !з < >; пч$$$ $шкйоп ТА11.(Ь: $п 1.1БТ) гегпгп ЫБТ !к < >; — тот же список, что и Ь только без первого элемента вч$$$ $впс$!оп ЕМРТУ(Ь: !п 1.1БТ) гегпгп ВООЬЕАХ !я < >; вчгй $впсйоп СКЕАТЕ гегвгп 1.1БТ !з < >; — пустой список $ппсйоп МАРЫБТ(Ь: $п ЫБТ) гегвгп ЫБТ; Тело МАРЫБТ имеет вид $впс$$оп МАРЫБТ(Ь: !п ЫБТ) гегвгп ЫБТ !з А, КЕЯ)П! ЫБР )зей!п А:= 1.; КЕБШ.Т:= СКЕАТЕ: — пустой список згй1!е пог ЕМРТУ(А) $оор АЬ$$$ ЬАБТ(КЕБЫЬТ, Р(НЕА)э(А))); А: = ТА1.1.(А); еп$$1оор; гегвгп КЕБ()П; епд МАРЫБТ; Настраиваемую функцию МАРЫБТ можно, например, конкретизировать для списка целых чисел и функции ЯНЗАКЕ следующим образом: $впспоп Б()1)АКЕ 1ХТЕОЕК ЫБТ !к пезг МАРЫБТ(1ХТЕОЕК 1.1БТ, 1ХТЕОЕК, БОЧАКЕ) Конечно, функция БО1)АКЕ должна иметь параметр типа 1ХТЕОЕК и возвращать значение типа 1ХТЕОЕК.

Кроме того, соответствующие функции для списков типа 1ХТЕОЕК ЫБТ должны быть доступны в окружении этой конкретизации, так как они явно не указаны. Глава 7 Структура программы и раздельная компиляция ~101 7.1. Введение Маленькие программы существенно отличаются от больших программных комплексов, так как последние состоят из большого числа компонент и модулей (тех же маленьких программ) и часто пишутся различными людьми независимо друг от друга. Язык программирования должен поддерживать на ряду с программированием в узком смысле (как зто делается в большинстве существующих языков программирования типа Паскаль и РЬ/1) и программирование в широком смысле.

Характеристики

Тип файла
DJVU-файл
Размер
4,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6451
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее