Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 220


     

package body  на_векторах is

            function сумма (А, В: вектор) return вектор is

     Z:вектор;

            begin

for j in вектор'нигр .. вектор'вегр loop

       Z(j) := сумма (А(j), B(j));

end  loop;

return  Z;

            end сумма;

function сигма (А: вектор) return элемент is

Z: элемент := А (вектор'нигр);

     for j in вектор'нигр + 1 .. вектор'вегр loop

       Z := сумма (Z, А(j));

end loop ;

     return Z ;

end сигма;

end на_векторах;

Вот возможная конкретизация этого пакета:

      package на_целых_векторах is

            new на_векторах (INTEGER, день, ведомость,'+');

Здесь тип "ведомость" считается введенным объявлением

            type ведомость is array (день range < >) of INTEGER;

a '+' - предопределенная операция для целых.

Так что если

   Т: ведомость (Вт..Пт) := (25,35,10,20);

   R: ведомость (Вт..Пт) := (10,25,35,15);

то в соответствующем контексте

        сумма(T,R) = (35,60,45,35);

        сигма(T) = 90; сигма(R) = 85;

Обратите внимание на применение агрегатов, а также на то, как в них используется линейный порядок на дискретных типах.

Родовые аргументы должны строго соответствовать спецификации родовых параметров. За этим ведется строгий контроль. Так, функция '+' подошла, а, скажем "or" или тем более "not" - не подойдет (почему?).

Замечание. Обратите внимание на нарушение принципа целостности объектов в аппарате родовых сегментов.

Вопрос. В чем это проявляется?

На этом закончим разговор о родовых сегментах.

 

4.14. Асинхронные процессы

4.14.1. Зачем они нужны

Мы уже рассматривали несколько ситуаций, когда возникает потребность в асинхронных процессах. Еще когда речь шла о модели Бэкуса, отмечалась возможность ускорить перемножение матриц, если независимые скалярные произведения вычислять на параллельно (асинхронно) работающих процессорах. Отмечали мы и возможную пользу от независимого вычисления отрицаний в процедуре "минус". Но это были примеры оптимизации, когда асинхронные вычисления полезны, но не являются необходимыми.


- Начало -  - Назад -  - Вперед -