Комбінаторне програмування
Комбінаторне програмування (англ. function-level programming) — парадигма програмування, що використовує принципи комбінáторної логіки, тобто не вимагає явного згадування аргументів визначаємої функції (програми) та використовує замість змінних комбінатори та композіції. Є особливим різновидом функційного програмування, але, на відміну від основного його напрямку, комбінаторне програмування не використовує λ-абстракцію). Концептуалізував та популяризував парадигму Джон Бекус в тюрінговскій лекції 1977 року «Чи можливо звільнити від стилю програмування фон Неймана»[1], в якій представив мову FP[en]. Наприкінці 1980-х Бекус із колегами з Алмаденського дослідного центру IBM[en] в розвиток ідей FP і конкатенативної парадигми розробили мову FL[en]. При цьому елементи конкатенативне програмування проявляються вже в APL, а в пізніших його різновидах — мовами J и K — запозичені багато ідей FP, і оформлені в концепцію безточкового стилю, який може бути застосований не тільки для функціонального програмування в строгому сенсі (Зокрема, елементи такого стилю мають місце в оболонках UNIX при застосуванні конвеєрів для перенаправлення вводу-виводу. Приклад для мови J: визначення функції (в термінах J — «дієслова») для обчислення середнього арифметичного:
де Виразні можливості сучасних універсальних функціональних мов, таких як ML та Haskell, дозволяють досить комфортно залишатися в парадигмі комбінаторного програмування, тобто, не вдаватися до λ-абстракції та змінним взагалі. Наприклад, функція підсумовування списків на Haskell з використанням комбінатора
Фактично, конкатенативне програмування забезпечує безточковий стиль, притому в ранніх конкатенативного мовах, таких як Форт, свобода від іменованих змінних досягається не математично, шляхом визначення функцій у вигляді комбінації якихось інших функцій, а імперативно, шляхом послідовних маніпуляцій зі стеком. В сучасних конкатенативних мовах, таких як Factor[en], є тенденція до використання функціональних комбінаторів, а не явних маніпуляцій зі стеком. Можливо також використання безточкового стилю і в мовах, які не підтримують функції вищого порядку і часткове застосування, наприклад, за допомогою імітації функцій вищого порядку за допомогою шаблону Curried Object[2]. Зноски
|
Portal di Ensiklopedia Dunia