Комбінаторне програмування (англ. function-level programming) — парадигма програмування, що використовує принципи комбінáторної логіки, тобто не вимагає явного згадування аргументів визначаємої функції (програми) та використовує замість змінних комбінатори та композіції. Є особливим різновидом функційного програмування, але, на відміну від основного його напрямку, комбінаторне програмування не використовує λ-абстракцію).
Концептуалізував та популяризував парадигму Джон Бекус в тюрінговскій лекції 1977 року «Чи можливо звільнити від стилю програмування фон Неймана», в якій представив мову [en]. Наприкінці 1980-х Бекус із колегами з [en] в розвиток ідей FP і конкатенативної парадигми розробили мову [en]. При цьому елементи конкатенативне програмування проявляються вже в APL, а в пізніших його різновидах — мовами J и K — запозичені багато ідей FP, і оформлені в концепцію безточкового стилю, який може бути застосований не тільки для функціонального програмування в строгому сенсі (Зокрема, елементи такого стилю мають місце в оболонках UNIX при застосуванні конвеєрів для перенаправлення вводу-виводу.
Приклад для мови J: визначення функції (в термінах J — «дієслова») для обчислення середнього арифметичного:
avg =. +/ % #
де +/
— «монада» (унарна операція) підсумовування списку, %
— «діада» (бінарна операція) ділення, а #
— «діада» взяття довжини списку. Дана конструкція (в термінах J — «пропозиція») читається «середнє є сума, поділена на довжину». Подібні конструкції з трьох функцій-дієслів в J прийнято називати «виделками».
Виразні можливості сучасних універсальних функціональних мов, таких як ML та Haskell, дозволяють досить комфортно залишатися в парадигмі комбінаторного програмування, тобто, не вдаватися до λ-абстракції та змінним взагалі. Наприклад, функція підсумовування списків на Haskell з використанням комбінатора foldr
:
sum = foldr (+) 0
Фактично, конкатенативне програмування забезпечує безточковий стиль, притому в ранніх конкатенативного мовах, таких як Форт, свобода від іменованих змінних досягається не математично, шляхом визначення функцій у вигляді комбінації якихось інших функцій, а імперативно, шляхом послідовних маніпуляцій зі стеком. В сучасних конкатенативних мовах, таких як [en], є тенденція до використання функціональних комбінаторів, а не явних маніпуляцій зі стеком.
Можливо також використання безточкового стилю і в мовах, які не підтримують функції вищого порядку і часткове застосування, наприклад, за допомогою імітації функцій вищого порядку за допомогою шаблону .
Зноски
- Джон Бекус. Чи можливо звільнити від стилю програмування фон Неймана? Алгебра програм у функціональному стилі // Лекції лауреатів премии Тюрінга = Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. — Світ, 1993. — С. 84—158. — 2000 прим. — .
- «Arguments and results» [ 24 Червня 2016 у Wayback Machine.] (Формат PostScript, 808KB)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Kombinatorne programuvannya angl function level programming paradigma programuvannya sho vikoristovuye principi kombinatornoyi logiki tobto ne vimagaye yavnogo zgaduvannya argumentiv viznachayemoyi funkciyi programi ta vikoristovuye zamist zminnih kombinatori ta kompoziciyi Ye osoblivim riznovidom funkcijnogo programuvannya ale na vidminu vid osnovnogo jogo napryamku kombinatorne programuvannya ne vikoristovuye l abstrakciyu Konceptualizuvav ta populyarizuvav paradigmu Dzhon Bekus v tyuringovskij lekciyi 1977 roku Chi mozhlivo zvilniti vid stilyu programuvannya fon Nejmana v yakij predstaviv movu en Naprikinci 1980 h Bekus iz kolegami z en v rozvitok idej FP i konkatenativnoyi paradigmi rozrobili movu en Pri comu elementi konkatenativne programuvannya proyavlyayutsya vzhe v APL a v piznishih jogo riznovidah movami J i K zapozicheni bagato idej FP i oformleni v koncepciyu beztochkovogo stilyu yakij mozhe buti zastosovanij ne tilki dlya funkcionalnogo programuvannya v strogomu sensi Zokrema elementi takogo stilyu mayut misce v obolonkah UNIX pri zastosuvanni konveyeriv dlya perenapravlennya vvodu vivodu Priklad dlya movi J viznachennya funkciyi v terminah J diyeslova dlya obchislennya serednogo arifmetichnogo avg de monada unarna operaciya pidsumovuvannya spisku diada binarna operaciya dilennya a diada vzyattya dovzhini spisku Dana konstrukciya v terminah J propoziciya chitayetsya serednye ye suma podilena na dovzhinu Podibni konstrukciyi z troh funkcij diyesliv v J prijnyato nazivati videlkami Virazni mozhlivosti suchasnih universalnih funkcionalnih mov takih yak ML ta Haskell dozvolyayut dosit komfortno zalishatisya v paradigmi kombinatornogo programuvannya tobto ne vdavatisya do l abstrakciyi ta zminnim vzagali Napriklad funkciya pidsumovuvannya spiskiv na Haskell z vikoristannyam kombinatora foldr sum foldr 0 Faktichno konkatenativne programuvannya zabezpechuye beztochkovij stil pritomu v rannih konkatenativnogo movah takih yak Fort svoboda vid imenovanih zminnih dosyagayetsya ne matematichno shlyahom viznachennya funkcij u viglyadi kombinaciyi yakihos inshih funkcij a imperativno shlyahom poslidovnih manipulyacij zi stekom V suchasnih konkatenativnih movah takih yak en ye tendenciya do vikoristannya funkcionalnih kombinatoriv a ne yavnih manipulyacij zi stekom Mozhlivo takozh vikoristannya beztochkovogo stilyu i v movah yaki ne pidtrimuyut funkciyi vishogo poryadku i chastkove zastosuvannya napriklad za dopomogoyu imitaciyi funkcij vishogo poryadku za dopomogoyu shablonu ZnoskiDzhon Bekus Chi mozhlivo zvilniti vid stilyu programuvannya fon Nejmana Algebra program u funkcionalnomu stili Lekciyi laureativ premii Tyuringa Can Programming Be Liberated from the von Neumann Style A Functional Style and Its Algebra of Programs Svit 1993 S 84 158 2000 prim ISBN 5 03 002130 2 Arguments and results 24 Chervnya 2016 u Wayback Machine Format PostScript 808KB