Funkcionális programozás

Ez a közzétett változat, ellenőrizve: 2023. július 11. 2 változtatás vár ellenőrzésre.

A funkcionális programozás (angolul: functional programming) egy programozási módszertan, vagyis egyike a programozási paradigmáknak. Nevezhetjük applikatív programozásnak is. A funkcionális programnyelvek a programozási feladatot egy függvény kiértékelésének tekintik. A két fő eleme az érték és a függvény, nevét is függvények kitüntetett szerepének köszönheti.

Egy más megfogalmazás szerint, a funkcionális programozás során a programozó inkább azt specifikálja programban, mit kell kiszámítani, nem azt, hogy hogyan, milyen lépésekben. Függvények hívásából és kiértékelésből áll a program. Nincsenek állapotok, mellékhatások (nem számít, mikor, csak az melyik függvényt hívjuk).[1]

A rekurzió a funkcionális programozás egyik fontos lehetősége, az ismétlések és ciklusok helyett rekurziót alkalmazhatjuk.

Áttekintés

szerkesztés

Alapjául a lambda-kalkulus (vagy λ-kalkulus) szolgál, a tisztán funkcionális nyelvek a matematikában megszokott függvényfogalmat valósítják meg. Az ilyen programozás során a megoldandó feladatnál az eredményhez vezető út nem is biztosan ismert, a program végrehajtásához csupán az eredmény pontos definíciója szükséges. Tisztán funkcionális programozás esetén tehát nincs állapot és nincs értékadás.

Egy egyszerű funkcionális program például az f f1 kifejezés, ahol az f egy függvényértéket eredményező kifejezés (röviden függvény), az f1 pedig egy tetszőleges kifejezés. Matematikailag ezt úgy is mondhatjuk, hogy az   függvényt alkalmazzuk az   argumentumra.

Egy Haskell nyelven írt példa, a faktoriális függvény definíciója:

factorial 0 = 1
factorial n = n * factorial(n-1)

Ugyanez Erlang nyelven:

factorial(0) -> 1;
factorial(N) -> N * factorial(N-1)

A faktoriális függvény egy lehetséges megadása Lisp nyelven:

(defun factorial (n)
    (if (<= n 1)
      1
      (* n (factorial (- n 1)))))

Végül egy lambda-absztrakciós megoldás Standard ML (SML) nyelven:

val rec factorial = fn 0 => 1 | n => n * factorial(n -1)

Történelem

szerkesztés

Az egyik korai funkcionális nyelv a Lisp, melyet John McCarthy alkotott meg az 1950-es évek végén.[2] A ma legelterjedtebb változatai az általános célú Common Lisp és Scheme nyelvek.

Az első típusos funkcionális nyelv az ML (Meta Language) egyik korai változata volt, amit Robin Milner készített az 1970-es évek közepén a Edinburgh-i Egyetemen, melyben megvalósította típuselméleti eredményeit. Ezt a nyelvet alapvetően logikai állítások és tételek bizonyítására tervezték.

A Hope és egyéb funkcionális nyelvek, köztük az ML és NPL által inspirálva dolgozták ki az SML, azaz Standard ML nyelvet az 1980-as évek közepétől. Több dialektusa is készült, mint például az OCaml.

Funkcionális nyelvek

szerkesztés
  1. Dr. Vadász Dénes: Programozási paradigmák, programozási nyelvek (letölthető egyetemi oktatási anyag). [2015. május 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. február 19.)
  2. John McCarthy: The implementation of LISP (HTML). History of Lisp. (Hozzáférés: 2016. február 18.)