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



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


Исходная пара векторов представляет собой матрицу с двумя строками e1 и e2.

Вспомним определение скалярного произведения - это

         

         Сумма всех произведений

(d)      попарно соответствующих компонент

         подлежащих перемножению векторов.

         

Прочитаем это определение "с конца". Нужно, во-первых, получить попарно компоненты векторов e1 и e2, во-вторых, получить все произведения этих пар, в-третьих, получить сумму (сложить) все эти произведения.

Итак, план (программа) наших действий состоит из трех последовательных шагов, причем результат предыдущего шага непосредственно используется последующим шагом.

Следовательно, наша программа представляет собой композицию функций 

    f3 * f2 * f1

Какие же это функции?

Функция f1 определяет то, что нужно сделать "во-первых". Если даны два вектора, скажем,

(b1)         (10 20 30) (3 2 1)

то нужно получить их компоненты попарно.

(b2)         (10 3) (20 2) (30 1)

С этим мы уже встречались, так работает функция "транс". Значит, естественно положить f1 = транс.

Функция f2 определяет то, что нужно сделать "во-вторых". Нужно получить все произведения пар. В нашем примере - это выражение

(b3)        30 40 30

Такое выражение получится, если функцию "умножить" применить к каждому подвыражению выражения (b2). С подобным мы тоже встречались - так работает общая аппликация "А" с аргументом "умножить" (x).

Значит, естественно положить f2 = (Аx).

Наконец, f3 определяет, что нужно сделать "в-третьих". Нужно получить общую сумму всех компонент (b3), т.е.

(b4)      100

Такое выражение получится, если к (b3) применить форму "редукция", с аргументом "сложить" (+). Значит, естественно положить

         f3 = (/ +).

Итак, можно выписать нашу программу-формулу полностью:

      (/+) * (Аx) * транс  .

Эта формула описывает именно ту функцию, которая решает нашу задачу, т.е. вычисляет скалярное произведение.


Содержание  Назад  Вперед