Язык программирования Перфолента.Net - Официальный сайт

 Язык программирования Перфолента.Net - Официальный сайт.

Поиск   
Главная :: О проекте :: Контакты :: Обратная связь :: Благодарности :: ВходГость

   >   >   > 


Пример «Действия ПоВсем и ПоКаждому»

Файлы:

  • Синтаксис языка
    • Действия
      • Действия ПоВсем и ПоКаждому.перфо

Пример программы на языке программирования Перфо:





//Эта программа написана на языке программирования Перфо
//для демонстрации использования действий ПоВсем и ПоКаждому

//********** ПоВсем ***********

//является расширенным аналогом действия apply из языка Scheme.
//в отличие от языка Scheme, может работать не только со списками, но и с массивами или коллекциями.

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

//Действие ПоВсем применяет указанную функцию сразу ко всем аргументам.
//Возвращается результатов выполнения функции.
//Если среди аргументов есть списки, массивы или коллекции, 
//то их содержимое извлекается в единый список аргументов. 
//Указанная функция должна иметь возможность принять все аргументы за один вызов.

//сначала проверим на простой последовательности аргументов
(Вывод (ПоВсем + 1 2 3 4 5 6) пс)

//теперь для списка, перемножим все элементы
(Вывод (ПоВсем * (Список 1 2 3 4 5 6)) пс)

//для списка находящегося в переменной
(Перем спис (Список 1 2 3 4 5 6))
(Вывод (ПоВсем + спис) пс)

//для массива
(Перем мас (Массив 5 Целое 1 2 3 4 5 6)) //при создании массив можно сразу заполнить значениями
(Вывод (ПоВсем + мас) пс)

//для коллекции
(Перем стек (Новый Стек))
(стек.Добавить 100)
(стек.Добавить 200)
(стек.Добавить 300)
(Вывод (ПоВсем + стек) пс)

//а теперь комплексно, для всех значений сразу
(Вывод (ПоВсем + 1000 2000 (Список 10 20 30) мас стек) пс)


//********** ПоКаждому ***********

//является расширенным аналогом действия 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)) пс) 
(Вывод "Три списка = " (ПоКаждому (функ (х у z)(+ х у z)) (Список 1 2 3 4) (Список 4 5 6) (Список 7 8 9)) пс) 

//попробуем с заранее определенной функцией
(Функция (СложитьПараметры х у)(+ х у))
(Вывод "Функция СложитьПараметры = " (ПоКаждому СложитьПараметры (Список 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) пс)

//вычислим синус для всех чисел
(Вывод "Синусы = " (ПоКаждому Синус (Список 1 2 3 4)) пс)

//возьмем первые буквы
(Вывод "Первые буквы = " (ПоКаждому Лев (Список "Вася" "Петя" "Коля" "Аня") (Список 1 1 1 1)) пс)

//возьмем первые буквы из массива
(Перем Имена (Массив 3 Строка "Вася" "Петя" "Коля" "Аня"))
(Вывод "Первые буквы из массива = " (ПоКаждому Лев Имена (Список 1 1 1 1)) пс)
(Вывод "Последние буквы из массива = " (ПоКаждому Прав Имена (Список 1 1 1 1)) пс)


//---------------------------
(Вывод "ГОТОВО!!!" пс)



К началу статьи


Вернуться в раздел:
Примеры по языку Перфо

Перейти в раздел:
Примеры
  Поддержи проект!

Вы можете поддержать разработку Перфоленты, перечислив любую удобную сумму, которая пойдет на развитие языка и поддержку инфраструктуры сайта.

  Новости:
      21.01.2026 На сайт добавлена статья "Конструируем класс. События"
      20.01.2026 Опубликован новый релиз 0.4.18.0_NY языка программирования Перфолента.Net
      29.12.2025 Анонс: Новая возможность - разрабатываем веб-сайты, веб-приложения и веб-API на Перфоленте!
      07.06.2025 Небольшие дополнения к документации на сайте - описание атрибута поля &Атомарное
      09.05.2025 На сайте опубликован релиз 0.4.16.0_SE дистрибутива языка программирования Перфолента.Net
      27.04.2025 Дополнена статья про циклы
      04.01.2025 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.15.0_CE
      23.09.2024 Опубликована новая статья: "Конструируем класс. Делегаты."
      30.08.2024 Опубликован новый релиз дистрибутива языка программирования Перфолента.Net версии 0.4.14.0
      24.05.2024 Обновлён справочный раздел сайта
      01.07.2023 Новая версия 0.4.13.0 языка программирования Перфолента.Net
       Все новости