Решим одну и ту же задачу используя три различных стиля — процедурный, функциональный и стиль, основанный на правилах преобразований.
Работать будем со списком, состоящим из пар чисел:
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».
Комментариев нет:
Отправить комментарий