Среда, 27.11.2024
Ukrainiancontet.at.ua
Меню сайта
Категории раздела
Програмування [35]
Мови веб-програмування [5]
О компании [0]
Новости игры
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2015 » Октябрь » 25 » Комбінаторне програмування
22:34
Комбінаторне програмування
Комбінаторне програмування (англ. function-level programming) — це парадигма програмування, не вимагає явного згадки аргументів визначається функції (програми) і використовує замість змінних комбінатори і композицію функцій (але не λ-абстракція). Таким чином комбінаторне програмування можна вважати особливою різновидом функціонального. Різновидом комбінаторного можна вважати конкатенативное програмування.

У мовах J і K (сучасних різновидах APL) цей підхід відомий як неявне програмування (англ. tacit programming).

Ось класичний приклад на мові J — визначення функції (в термінах J — дієслова) для обчислення середнього арифметичного:

avg =. +/ % #

Тут +/ — монада (унарная операція) підсумовування списку, % діада (бінарна операція) розподілу, а # діада взяття довжини списку. Дана конструкція (пропозиція мови J) читається «середнє є сума, поділена на довжину». Подібні конструкції з трьох функцій-дієслів у J прийнято називати «вилками».

За межами співтовариства АПЗ, функціональних мовах сімейства ML, то і на комбінаторне програмування haskell часто посилаються як на бесточечный стиль (стиль, вільний від покажчиків англ. бесточечный програмування, використовується також кілька зневажлива гра слів англ. безглуздо програмування).

Наприклад, просту функцію додавання списків на Хаскелл ми можемо «в лоб» визначити за допомогою рекурсії:
сума (х:хз) = х + (сума хз)
Сума [] = 0


Це визначення легко спростити, використовуючи комбінатор foldr:
сума з XS = foldr (+) 0 хз

і, нарешті, ми можемо перевести його в бесточечную форму, вільну від явних імен параметрів:
сума = foldr (+) 0

Здебільшого «вільними від покажчиків» є конкатенативные мови. У класичному Форте свобода від іменованих змінних досягається не математично, шляхом визначення функцій у вигляді комбінації якихось інших функцій, а імперативно, шляхом послідовних маніпуляцій зі стеком. Втім, в сучасних конкатенативных мовах, таких як Чинник, є тенденція до використання функціональних комбінаторів, а не очевидних маніпуляцій зі стеком.

Можливе використання даного стилю в нефункціональних мовами, не підтримують функції вищого порядку і часткове застосування. Функції вищого порядку можна імітувати, наприклад, за допомогою об'єктів. Для імітації часткового застосування служить патерн «Curried Object», описаний у статті Джеймса Нобла
Категория: Програмування | Просмотров: 429 | Добавил: Admin | Теги: Комбінаторне програмування | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт

Поиск
Интернет
Здоровье
Афиша
Ситуация на восток
Религия
Архив записей
Каталог сайтов Всего.RU
Рейтинг@Mail.ru
Copyright Ukrainiancontet.at.ua © 2024
uCozЯндекс.Метрика