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

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

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

   >   >   > 


Пример «Лямбды и замыкания»

Файлы:

  • Синтаксис языка
    • Функции
      • Лямбды и замыкания.перфо

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



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

//Лямбда-функция определяется в языке Перфо так же, как обычная функция,
//но без указания имени функции.
//Используется ключевое слово Функ.

//Создадим лямбда-функцию и сохраним ее в переменную МояЛямбда
(Перем МояЛямбда (Функ (А) (* А А)))

//вызовем лямбда-функцию хранящуюся в переменной
(Вывод "Моя лямбда = " (МояЛямбда 5) пс пс)
//Ответ: 25

//====== Замыкание ======

//создадим функцию возвращающую лямбда-функцию
(Функция (СоздатьЛямбду) 
    
    //переменная Ном определена вне лямбда-функции, но будет ею захвачена
    (Перем Ном 0) 
    
    //лямбда-функция принимает один параметр
    (Функ (А) 
        
        (Вывод Ном " " А " : ") //покажем, что мы имеем на входе лямбда-функции
        
        //изменяем внешнюю переменную и возвращаем её
        (Уст А (+ А 1)) 
        (Уст Ном (+ Ном А)) 
        (Ном)
    ) 
) 

//создадим две лямбда-функции, что бы показать,
//что каждая из них содержит свою копию захваченной переменной Ном
(Перем Л1 (СоздатьЛямбду)) 
(Перем Л2 (СоздатьЛямбду)) 

//вызываем несколько раз первую лямбда-функцию
(Вывод "Вызов лямбды Л1:" пс)
(Для (Инд 0 4)
    (Вывод (Л1 Инд) ПС)     
) 
(Вывод ПС) 

//вызываем несколько раз вторую лямбда-функцию
(Вывод "Вызов лямбды Л2:" пс)
(Для (Инд 10 14)
    (Вывод (Л2 Инд) ПС)     
) 
(Вывод ПС) 

//Результат:
//Вызов лямбды Л1:
//0 0 : 1
//1 1 : 3
//3 2 : 6
//6 3 : 10
//10 4 : 15
//Вызов лямбды Л2:
//0 10 : 11
//11 11 : 23
//23 12 : 36
//36 13 : 50
//50 14 : 65

//====== Используем лямбду как хранилище действий ======

// Допустим, что у нас есть функция: 
// Ф(х,у) = х*(1+х*у)^2+у*(1?у)+(1+х*у)*(1?у)

// Мы можем представить её в виде
// двух вспомогательных выражений:
// А = (1+х*у)
// Б = (1?у)
// и основного выражения
// Ф(х,у) = х*А^2+у*Б+А*Б

(Функция (Ф1 х у)
  (Перем А (+ 1 (* х у)))  
  (Перем Б (- 1 у))
  //вычислим основное выражение 
  (+ (* х (* А А)) (* у Б) (* А Б))
)
//тест
(Вывод "Ф1(х,у) = " (Ф1 2 3) пс)            
//Ответ: 78

// Перепишем с использованием вложенной функции:

(Функция (Ф2 х у)
  //основное выражение оформим в виде функции 
  (Функция (Результат А Б)
      (+ (* х (* А А)) (* у Б) (* А Б))
  )
  //вызовем функция передав ей вспомогательные выражения
  (Результат (+ 1 (* х у)) (- 1 у))
)
//тест
(Вывод "Ф2(х,у) = " (Ф2 2 3) пс)            
//Ответ: 78

// Перепишем с использованием лямбда-выражения:

(Функция (Ф3 х у)
  ( //эта пара скобок нужна, что бы сразу вызвать лямбда-выражение с параметрами
    //т.к. лямбда-выражение становится вычисляемым идентификатором действия
  
  //основное выражение оформим в виде лямбда-выражения 
  (Функ (А Б) (+ (* х (* А А)) (* у Б) (* А Б)))
  //переддим лямбда выражению вспомогательные выражения
  (+ 1 (* х у)) 
  (- 1 у)
  
  )
)
//тест
(Вывод "Ф3(х,у) = " (Ф3 2 3) пс)            
//Ответ: 78



            

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


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

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

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

  Новости:
      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
       Все новости