Funkcionális programozás F#-ban Gránicz Ádám Funkcionális programozás F#-ban
Funkcionális Programozás Imperatív vs Funkcionális Állapotváltozások sorozata egymásba ágyazott függvények alkalmazása változok nélkül Néhány fontos FP elem: első osztályú függvények, magasabb-szintű függvények, rekurzió mint flow control, closure-ok, mohó és lusta kiértékelés, polimorfizmus, típus inferencia, totális adatstrukturák, pattern matching, stb.
F# Funkcionális és objektum-orientált Erősen tipizált, kiváló és gyors kód .NET alatt a legkiforrottabb FP nyelv, teljes VS integrációval Interoperabilitás más .NET nyelvekkel Szimbolikus szkriptezés és programozás
Első osztályú függvények A legfontosabb alkotóelem: a függvények „értékek”, csakúgy mint a számok, stringek, stb. Tehát ki lehet őket számítani Anoním függvény: fun x -> x+1 fun x y -> x+y
Magasabb-szintű függvények Olyan függvények amik más függvényeket várnak mint parameter let f g x = g (g x) let double x = x+x f double 1 4 List.map double [1; 2; 3] [1; 4; 6]
LINQ [ … LINQ ... ]
Closure-ok let d f = let dx = 0.00001 fun x -> (f(x+dx)–(f x))/dx d (fun x->x*x*x) 10.0 300.00003
Polimorfizmus és típus inferencia Nincs szükség típus annotációra A fordító „megtalálja” a legáltalánosabb típust let id x = x val id: ‘a->‘a // polimorfikus függvény val d:(float->float)->float-> float
Diszkriminált uniók / Pattern Matching [ … kifejezés kiértékelő ... ]
DSL implementáció [ … IntelliLOGO ... ]
F# Demók [Game of life, 3D vizualizáció, Deriválás]
Könyv Expert F# Don Syme, Adam Granicz, Antonio Cisternino http://www.amazon.com/Expert-F-Don-Syme/dp/1590598504
Kérdések? Több információ itt: http://www.intellifactory.com