Kombinatorisk programmering ( engelsk funktionsniveau programmering ) er et programmeringsparadigme , der bruger principperne for kombinatorisk logik , det vil sige, at det ikke kræver eksplicit omtale af argumenterne for den definerede funktion (program) og bruger kombinatorer og sammensætninger i stedet for variable . Det er en speciel form for funktionel programmering , men i modsætning til dens hovedretning bruger kombinatorisk programmering ikke λ-abstraktion .
Paradigmet blev konceptualiseret og populariseret af John Backus i Turings forelæsning fra 1977 "Er det muligt at frigøre programmering fra von Neumann-stilen" [1] , hvori han introducerede FP -sproget . I slutningen af 1980'erne udviklede Backus og kolleger ved IBM Almaden Research Center sproget FL som en udvikling af ideerne om FP og det sammenkædede paradigme . Samtidig optræder elementer af sammenkædet programmering allerede i APL , og i dens senere varianter - sprogene J og K - er mange ideer om FP lånt og indrammet i konceptet meningsløs stil , som ikke kun er anvendelig til funktionel programmering i streng forstand (især elementer af sådanne stilarter forekommer i UNIX- skaller, når der bruges rør til I/O-omdirigering ).
Eksempel på J-sproget: definition af en funktion (i form af J - "verbum") til beregning af det aritmetiske middelværdi:
avg =. +/ % #hvor +/ er "monade" (unær operation) for listesummation, % er "dyad" (binær operation) for division, og # er "dyad" for at tage længden af listen. Denne konstruktion (i form af J - "sætning") lyder " gennemsnittet er summen divideret med længden ". Lignende konstruktioner af tre funktionsverber i J kaldes "gafler".
Udtryksevnen af moderne universelle funktionelle sprog, såsom ML og Haskell , gør det ganske behageligt at blive i det kombinatoriske programmeringsparadigme, det vil sige slet ikke at ty til λ-abstraktion og variabler. For eksempel, funktionen Haskell listesum ved hjælp af kombinatoren foldr:
sum = foldr (+) 0Faktisk giver sammenkædningsprogrammering en meningsløs stil, og i tidlige sammenkædningssprog, såsom Forth , opnås frihed fra navngivne variabler ikke matematisk, ved at definere funktioner som en kombination af nogle andre funktioner, men imperativt ved successive stak- manipulationer . Moderne sammenkædede sprog som Factor har en tendens til at bruge funktionelle kombinatorer i stedet for eksplicitte stakmanipulationer.
Det er også muligt at bruge den prikkefri stil på sprog, der ikke understøtter funktioner af højere orden og delvis anvendelse, for eksempel ved at efterligne funktioner af højere orden gennem Curried Object -mønsteret [2] .