Перфо - ПоКаждому — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
'''ПоКаждому''' - является расширенным аналогом действия apply из языка Scheme. В отличие от языка Scheme, может работать не только со списками, но и с массивами или коллекциями.
+
----
 +
'''ПоКаждому''' - является расширенным аналогом действия map из языка Scheme. В отличие от языка Scheme, может работать не только со списками, но и с массивами или коллекциями.
  
  (ПоВсем функция аргумент1 ... аргументН), где аргумент это значение, список или коллекция
+
  (ПоКаждому функция аргумент1 ... аргументН), где аргумент это значение, список или коллекция
  
Действие ПоВсем применяет указанную функцию сразу ко всем аргументам.  
+
Действие ПоКаждому применяет указанную функцию к каждому набору элементов собираемых из указанных списков.
  
Если среди аргументов есть списки, массивы или коллекции, то их содержимое извлекается в единый список аргументов.  
+
Возвращается список результатов выполнения функции.
  
Указанная функция должна иметь возможность принять все аргументы за один вызов.
+
Например, если у нас есть два списка (Список 1 2 3) (Список 3 4 5),
  
сначала проверим на простой последовательности аргументов
+
к которым применяется лямбда-функция (функ (х у)(+ х у)), которая складывает значения параметров.
  
(Вывод (ПоВсем + 1 2 3 4 5 6) пс)
+
Тогда сначала функция будет вызвана для первой пары элементов Ф(1, 3),
  
теперь для списка, перемножим все элементы
+
а затем для второй пары элементов Ф(2, 4) и для третьей пары элементов Ф(3, 5),
 
(Вывод (ПоВсем * (Список 1 2 3 4 5 6)) пс)
 
  
для списка находящегося в переменной
+
и в результате мы получим новый список (4,6,8).
  
(Перем спис (Список 1 2 3 4 5 6))
+
----
(Вывод (ПоВсем + спис) пс)
+
* Если вместо списка задано значение, то оно считается первым элементом списка по умолчанию.
  
для массива [[Перфо - Массивы]]
+
* Если в одном из списков элементов меньше, чем в других, то будет обработано число элементов соответствующее самому маленькому списку.
 +
----
  
(Перем мас (Массив 5 Целое 1 2 3 4 5 6)) //при создании массив можно сразу заполнить значениями
+
тут у нас один список, поэтому и функция с одним параметром
(Вывод (ПоВсем + мас) пс)
 
  
для коллекции [[Перфо - Коллекции]]
+
(Вывод  "Один список = " (ПоКаждому (функ (х)(+ х х)) (Список 4 5 6)) пс) // пс - перевод строки
  
(Перем стек (Новый Стек))
+
а тут у нас два списка и, соответственно, функция с двумя параметрами
(стек.Добавить 100)
 
(стек.Добавить 200)
 
(стек.Добавить 300)
 
(Вывод (ПоВсем + стек) пс)
 
  
а теперь для всех значений сразу
+
Внимание!!! В первом списке последний элемент не используется, т.к. во втором меньше элементов!
  
  (Вывод (ПоВсем + 1000 2000 (Список 10 20 30) мас стек) пс)
+
(Вывод "Два списка = " (ПоКаждому (функ (х у)(+ х у)) (Список 1 2 3 4) (Список 4 5 6)) пс)
 +
 
 +
попробуем с заранее определенной функцией
 +
 
 +
(функция (СложитьПараметры х у)(+ х у))
 +
  (Вывод "Функция СложитьПараметры = " (ПоКаждому СложитьПараметры (Список 2 3 4) (Список 4 5 6)) пс)
 +
 
 +
попробуем обычные значения
 +
 
 +
(Вывод "Обычные значения = " (ПоКаждому + 4 6 7 8) пс)
 +
 
 +
проверим коллекции
 +
 
 +
(Перем мас1 (Массив 2 Целое 1 2 3))
 +
(Перем мас2 (Массив 2 Целое 10 20 30))
 +
(Вывод "Массивы = " (ПоКаждому (функ (х у)(+ х у)) мас1 мас2) пс)
 +
 
 +
список и массив
 +
 
 +
(Вывод "Список и массив = " (ПоКаждому (функ (х у)(+ х у)) (Список 1 2 3 4) мас1) пс)
  
 
== Перфо. Примеры ==
 
== Перфо. Примеры ==
Строка 46: Строка 60:
 
* [[Перфо - ПоВсем]]
 
* [[Перфо - ПоВсем]]
 
* [[Перфо - ПоКаждому]]
 
* [[Перфо - ПоКаждому]]
 +
  
 
[[Категория:Перфо.NET]]
 
[[Категория:Перфо.NET]]

Версия 21:16, 12 ноября 2020


ПоКаждому - является расширенным аналогом действия map из языка Scheme. В отличие от языка Scheme, может работать не только со списками, но и с массивами или коллекциями.

(ПоКаждому функция аргумент1 ... аргументН), где аргумент это значение, список или коллекция

Действие ПоКаждому применяет указанную функцию к каждому набору элементов собираемых из указанных списков.

Возвращается список результатов выполнения функции.

Например, если у нас есть два списка (Список 1 2 3) (Список 3 4 5),

к которым применяется лямбда-функция (функ (х у)(+ х у)), которая складывает значения параметров.

Тогда сначала функция будет вызвана для первой пары элементов Ф(1, 3),

а затем для второй пары элементов Ф(2, 4) и для третьей пары элементов Ф(3, 5),

и в результате мы получим новый список (4,6,8).


  • Если вместо списка задано значение, то оно считается первым элементом списка по умолчанию.
  • Если в одном из списков элементов меньше, чем в других, то будет обработано число элементов соответствующее самому маленькому списку.

тут у нас один список, поэтому и функция с одним параметром

(Вывод  "Один список = " (ПоКаждому (функ (х)(+ х х)) (Список 4 5 6)) пс) // пс - перевод строки

а тут у нас два списка и, соответственно, функция с двумя параметрами

Внимание!!! В первом списке последний элемент не используется, т.к. во втором меньше элементов!

(Вывод "Два списка = " (ПоКаждому (функ (х у)(+ х у)) (Список 1 2 3 4) (Список 4 5 6)) пс)

попробуем с заранее определенной функцией

(функция (СложитьПараметры х у)(+ х у))
(Вывод "Функция СложитьПараметры = " (ПоКаждому СложитьПараметры (Список 2 3 4) (Список 4 5 6)) пс)

попробуем обычные значения

(Вывод "Обычные значения = " (ПоКаждому + 4 6 7 8) пс)

проверим коллекции

(Перем мас1 (Массив 2 Целое 1 2 3))
(Перем мас2 (Массив 2 Целое 10 20 30))
(Вывод "Массивы = " (ПоКаждому (функ (х у)(+ х у)) мас1 мас2) пс)

список и массив

(Вывод "Список и массив = " (ПоКаждому (функ (х у)(+ х у)) (Список 1 2 3 4) мас1) пс)

Перфо. Примеры