Kombinatorisk programmering

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 5. oktober 2018; checks kræver 7 redigeringer .

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 (+) 0

Faktisk 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] .

Noter

  1. John Backus. Er det muligt at frigøre programmering fra von Neumanns stil? Funktionel stil og det tilsvarende program Algebra // Turing-prisforelæsninger = Kan programmering frigøres fra von Neumann-stilen? En funktionel stil og dens algebra af programmer. - M .: Mir , 1993. - S.  84 -158. — 560 s. - 2000 eksemplarer.  — ISBN 5-03-002130-2 .
  2. "Argumenter og resultater" Arkiveret 24. juni 2016 på Wayback Machine ( PostScript -format, 808KB )

Links