Такой баголовок такого Злога.

понедельник, 31 июля 2006 г.

Стили программирования в «Математике»

Решим одну и ту же задачу используя три различных стиля — процедурный, функциональный и стиль, основанный на правилах преобразований.

Работать будем со списком, состоящим из пар чисел:

pairs = {{58,96}, {85,22}, {100,69}, {5, 37}, {32,64}, {41,86}, {14,0}, {79,22}, {55,36}, {86,39}, {38,1}, {11,15}};


Процедурный подход похож на работу с языками программирования типа C или Fortran: создаём пустой массив result той же размерности, что и исходный, и заменяем каждый элемент в result суммой пары значений из pairs.

result = Table[Null,{Length[pairs]}];

Do[

   result[[k]] = pairs[[k,1]]+pairs[[k,2]],

   {k,1,Length[pairs]}

]

result

{154, 107, 169, 42, 96, 127, 14, 101, 91, 125, 39, 26}


Структурированная процедура с использованием Table:

Table[pairs[[k,1]]+pairs[[k,2]], {k,Length[pairs]}]

{154, 107, 169, 42, 96, 127, 14, 101, 91, 125, 39, 26}


Функциональный стиль основан на идее замены каждой пары List[a,b] выражением Plus[a,b]. Сделаем это, используя функцию Apply с указанием правильной спецификации уровня.

Apply[Plus,pairs,{1}]

{154, 107, 169, 42, 96, 127, 14, 101, 91, 125, 39, 26}


Тот же результат, только с помощью более компактной формы, достигается применением функции Total к каждому элементу списка pairs:

Map[Total, pairs]

{154, 107, 169, 42, 96, 127, 14, 101, 91, 125, 39, 26}


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

pairs/.{p_, q_} -> p+q

{154, 107, 169, 42, 96, 127, 14, 101, 91, 125, 39, 26}


По материалам «Technical software news».

Комментариев нет: