Funkcionális programozás
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]- APL
- Clojure
- Common Lisp
- Curl
- DAX
- Elm
- Erlang
- F#
- Haskell
- Hope
- Lisp
- ML
- OCaml
- SASL
- Scala
- Standard ML
- Wolfram Language
- …
Források
[szerkesztés]- ↑ 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.)
- ↑ John McCarthy: The implementation of LISP (HTML). History of Lisp. (Hozzáférés: 2016. február 18.)