A
funkcionalis programozas
(angolul:
functional programming
) egy programozasi modszertan, vagyis egyike a
programozasi paradigmaknak
. Nevezhetjuk
applikativ programozasnak
is. A funkcionalis programnyelvek a programozasi feladatot egy fuggveny kiertekelesenek tekintik. A ket f? eleme az ertek es a fuggveny, nevet is fuggvenyek kituntetett szerepenek koszonheti.
Egy mas megfogalmazas szerint, a funkcionalis programozas soran a programozo inkabb azt specifikalja programban,
mit
kell kiszamitani, nem azt, hogy
hogyan
, milyen lepesekben. Fuggvenyek hivasabol es kiertekelesb?l all a program. Nincsenek allapotok, mellekhatasok (nem szamit, mikor, csak az melyik fuggvenyt hivjuk).
[1]
A
rekurzio
a funkcionalis programozas egyik fontos lehet?sege, az ismetlesek es ciklusok helyett rekurziot alkalmazhatjuk.
Alapjaul a
lambda-kalkulus
(vagy λ-kalkulus) szolgal, a tisztan funkcionalis nyelvek a matematikaban megszokott fuggvenyfogalmat valositjak meg. Az ilyen programozas soran a megoldando feladatnal az eredmenyhez vezet? ut nem is biztosan ismert, a program vegrehajtasahoz csupan az eredmeny pontos definicioja szukseges. Tisztan funkcionalis programozas eseten tehat nincs allapot es nincs ertekadas.
Egy egyszer? funkcionalis program peldaul az
f f1
kifejezes, ahol az
f
egy fuggvenyerteket eredmenyez? kifejezes (roviden
fuggveny
), az
f1
pedig egy tetsz?leges kifejezes. Matematikailag ezt ugy is mondhatjuk, hogy az
fuggvenyt alkalmazzuk az
argumentumra.
Egy
Haskell
nyelven irt pelda, a faktorialis fuggveny definicioja:
factorial
0
=
1
factorial
n
=
n
*
factorial
(
n
-
1
)
Ugyanez
Erlang
nyelven:
factorial
(
0
)
->
1
;
factorial
(
N
)
->
N
*
factorial
(
N
-
1
)
A faktorialis fuggveny egy lehetseges megadasa
Lisp
nyelven:
(
defun
factorial
(
n
)
(
if
(
<=
n
1
)
1
(
*
n
(
factorial
(
-
n
1
)))))
Vegul egy lambda-absztrakcios megoldas
Standard ML
(SML) nyelven:
val
rec
factorial
=
fn
0
=>
1
|
n
=>
n
*
factorial
(
n
-
1
)
Az egyik korai funkcionalis nyelv a
Lisp
, melyet John McCarthy alkotott meg az 1950-es evek vegen.
[2]
A ma legelterjedtebb valtozatai az altalanos celu
Common Lisp
es
Scheme
nyelvek.
Az els? tipusos funkcionalis nyelv az
ML
(Meta Language) egyik korai valtozata volt, amit Robin Milner keszitett az 1970-es evek kozepen a Edinburgh-i Egyetemen, melyben megvalositotta tipuselmeleti eredmenyeit. Ezt a nyelvet alapvet?en logikai allitasok es tetelek bizonyitasara terveztek.
A Hope es egyeb funkcionalis nyelvek, koztuk az ML es NPL altal inspiralva dolgoztak ki az SML, azaz
Standard ML
nyelvet az 1980-as evek kozepet?l. Tobb dialektusa is keszult, mint peldaul az OCaml.
Funkcionalis nyelvek
[
szerkesztes
]