Programare combinatorie

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 5 octombrie 2018; verificările necesită 7 modificări .

Programarea combinatorie ( în limba engleză  function-level Programming ) este o paradigmă de programare care utilizează principiile logicii combinatorii , adică nu necesită mențiunea explicită a argumentelor funcției (programului) definite și utilizează combinatoare și compoziții în loc de variabile . Este un tip special de programare funcțională , dar, spre deosebire de direcția sa principală, programarea combinatorie nu folosește λ-abstracția .

Paradigma a fost conceptualizată și popularizată de John Backus în prelegerea lui Turing din 1977 „Este posibil să se elibereze programarea din stilul von Neumann” [1] , în care a introdus limbajul FP . La sfârșitul anilor 1980, Backus și colegii de la Centrul de Cercetare IBM Almaden au dezvoltat limbajul FL ca o dezvoltare a ideilor de FP și a paradigmei concatenative . În același timp, elemente de programare concatenative apar deja în APL , iar în varietățile sale ulterioare - limbajele J și K  - multe idei de FP sunt împrumutate și încadrate în conceptul de stil inutil , care este aplicabil nu numai pentru programarea funcțională. în sens strict (în special, elementele unor astfel de stiluri apar în shell -urile UNIX când se utilizează conducte pentru redirecționarea I/O ).

Exemplu pentru limbajul J: definirea unei funcții (în termeni de J - „verb”) pentru calcularea mediei aritmetice:

avg =. +/ % #

unde +/ este „monada” (operația unară) a însumării listei, % este „diada” (operația binară) a împărțirii și # este „diada” de luare a lungimii listei. Această construcție (în termeni de J - „propoziție”) spune „ media este suma împărțită la lungime ”. Construcții similare ale trei verbe-funcție în J sunt numite „furcuri”.

Expresivitatea limbajelor funcționale universale moderne, cum ar fi ML și Haskell , face destul de confortabil să rămâneți în paradigma de programare combinatorie, adică să nu recurgeți deloc la λ-abstracție și variabile. De exemplu, funcția de sumă a listei Haskell folosind combinatorul foldr:

sum = foldr (+) 0

De fapt, programarea concatenativă oferă un stil inutil, în plus, în limbajele concatenative timpurii, cum ar fi Forth , libertatea de variabilele numite este obținută nu matematic, prin definirea funcțiilor ca o combinație a altor funcții, ci în mod imperativ , prin manipulări succesive de stivă . Limbile concatenative moderne, cum ar fi Factor , tind să folosească combinatoare funcționale mai degrabă decât manipulări explicite ale stivei.

De asemenea, este posibil să se utilizeze stilul fără puncte în limbi care nu acceptă funcții de ordin superior și aplicare parțială, de exemplu, prin imitarea funcțiilor de ordin superior prin modelul Curried Object [2] .

Note

  1. John Backus. Este posibil să eliberați programarea din stilul lui von Neumann? Stilul funcțional și programul corespunzătoare Algebra // Prelegerile Turing Prize = Poate fi eliberată programarea de stilul von Neumann? Un stil funcțional și algebra sa de programe. - M .: Mir , 1993. - S.  84 -158. — 560 p. - 2000 de exemplare.  — ISBN 5-03-002130-2 .
  2. „Argumente și rezultate” Arhivat 24 iunie 2016 la Wayback Machine ( format PostScript , 808KB )

Link -uri