Пример «Каррирование»
Файлы:
- Синтаксис языка
- Функции
- Каррирование.перфо
- Функции
Пример программы на языке программирования Перфо:
//Эта программа написана на языке программирования Перфо
//для демонстрации приёма Каррирование
//Каррирование — преобразование функции от многих аргументов в набор вложенных функций,
//каждая из которых является функцией от одного аргумента.
//изначально существует функция с двумя параметрами
(функция (сумма А Б)
(+ А Б)
)
//тест
(вывод "(сумма 1 10) = " (сумма 1 10) пс) // возвращает 11
//мы хотим получить возможность предварительно задавать один параметр,
//получая при этом новую функцию, принимающую только второй параметр
(Функция (сумматор А) // возвращает замкнутое лямбда-выражение, где:
(Функ (Б) // А - параметр принимающий значение, которое будет захваченно лямбда-выражением во время его создания,
(+ А Б)) // Б - параметр получаемого лямбда-выражения
)
(Перем плюс1 (сумматор 1)) // делаем функцию для прибавления 1 и сохраняем её в переменную
(вывод "(плюс1 5) = " (плюс1 5) пс) // возвращает 6
(вывод "(плюс1 10) = " (плюс1 10) пс) // возвращает 11
(Перем минус1 (сумматор -1)) // делаем функцию для вычитания 1 и сохраняем её в переменную
(вывод "(минус1 5) = " (минус1 5) пс) // возвращает 4
(вывод "(минус1 10) = " (минус1 10) пс) // возвращает 9
//*******************************************
//то же самое для функции с тремя параметрами
//*******************************************
//изначально существует функция с тремя параметрами
(функция (СуммаСУмножением А Б К)
(* (+ А Б) К)
)
//тест
(вывод "(СуммаСУмноженим 2 3 4) = " (СуммаСУмножением 2 3 4) пс) // возвращает 20
//мы хотим предварительно задавать коэффициет умножения
(Функция (УмножительСуммы К) // возвращает замкнутое лямбда-выражение, где:
(Функ (А Б) // К - параметр принимающий значение, которое будет захваченно лямбда-выражением во время его создания,
(* (+ А Б) К)) // А и Б - параметры получаемого лямбда-выражения
)
(Перем умнож2 (УмножительСуммы 2)) // делаем функцию умножения суммы на 2 и сохраняем её в переменную
(вывод "(умнож2 5 6) = " (умнож2 5 6) пс) // возвращает 22
(вывод "(умнож2 10 20) = " (умнож2 10 20) пс) // возвращает 60
(Перем умнож10 (УмножительСуммы 10)) // делаем функцию умножения суммы на 10 и сохраняем её в переменную
(вывод "(умнож10 5 6) = " (умнож10 5 6) пс) // возвращает 110
(вывод "(умнож10 10 20) = " (умнож10 10 20) пс) // возвращает 300
К началу статьи
Вернуться в раздел:
Примеры по языку Перфо
Перейти в раздел:
Примеры