Download - F#: Funkcijsko programiranje za .NET
![Page 1: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/1.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
Funkcijsko programiranje za .NET
Nikola Pleji¢ <[email protected]>
Web User Group, studeni 2010.
![Page 2: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/2.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Funkcijsko programiranje
• �In computer science, functional programming is aprogramming paradigm that treats computation as the
evaluation of mathematical functions and avoids state and
mutable data.�
![Page 3: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/3.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Primjer
[ for x in 1 .. 999 do
if x % 3 = 0 or x % 5 = 0 then yield x ]
|> List.sum
(Project Euler, zadatak 1: suma svih umnoºaka brojeva 3
i 5 manjih od 1000)
![Page 4: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/4.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Primjer
[ for x in 1 .. 999 do
if x % 3 = 0 or x % 5 = 0 then yield x ]
|> List.sum
(Project Euler, zadatak 1: suma svih umnoºaka brojeva 3
i 5 manjih od 1000)
![Page 5: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/5.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
• po£eci: kasnih 1950-ih
• MIT: John McCarthy / LISP
• Scheme, ML
• FP danas:
• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih
sustava
![Page 6: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/6.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
• po£eci: kasnih 1950-ih
• MIT: John McCarthy / LISP
• Scheme, ML
• FP danas:
• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih
sustava
![Page 7: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/7.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
• po£eci: kasnih 1950-ih
• MIT: John McCarthy / LISP
• Scheme, ML
• FP danas:
• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih
sustava
![Page 8: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/8.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Povijest
• teorijska podloga: A. Church - λ ra£un (1930-ih)
• po£eci: kasnih 1950-ih
• MIT: John McCarthy / LISP
• Scheme, ML
• FP danas:
• Haskell, Erlang, OCaml, XSLT...• vrlo popularno u akademskoj zajednici i u razvoju visokorizi£nih
sustava
![Page 9: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/9.jpg)
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
![Page 10: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/10.jpg)
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
![Page 11: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/11.jpg)
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
![Page 12: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/12.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora
• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
![Page 13: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/13.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora
• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
![Page 14: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/14.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora
• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
![Page 15: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/15.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora
• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
![Page 16: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/16.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Za²to funkcijsko programiranje?
• asinkronost, paralelizacija i iskori²tavanje vi²ejezgrenihprocesora
• �druga£iji� pristup i izraºajnija sintaksa pogodna zamatematiku, DSL-ove...
• manje koda = manje bugova
• osobno prosvjetljenje
• geekPoints++
![Page 17: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/17.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Hello, World!
printfn �Hello, World!�
![Page 18: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/18.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
![Page 19: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/19.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
![Page 20: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/20.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
![Page 21: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/21.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
![Page 22: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/22.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
![Page 23: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/23.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
![Page 24: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/24.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# i .NET Framework
• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)
• referenca na DLL + open [namespace]
• C# library → F#
• F# library → C#
![Page 25: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/25.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# i .NET Framework
• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)
• referenca na DLL + open [namespace]
• C# library → F#
• F# library → C#
![Page 26: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/26.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# i .NET Framework
• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)
• referenca na DLL + open [namespace]
• C# library → F#
• F# library → C#
![Page 27: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/27.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# i .NET Framework
• puni pristup Base Class Libraryju + libraryji speci�£ni za F#(Microsoft.FSharp)
• referenca na DLL + open [namespace]
• C# library → F#
• F# library → C#
![Page 28: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/28.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# na Windowsima
• Visual Studio 2010
• Visual Studio 2008 uz zasebnu instalaciju
![Page 29: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/29.jpg)
Funkcijsko programiranje F# Primjeri Resursi
F# na drugim platformama
• GNU/Linux i MacOS X: Mono3
• editori: MonoDevelop 2.44, Emacs, Vim...
3http://fsxplat.codeplex.com/4http://functional-variations.net/screencasts/linux-monodevelop.aspx
![Page 30: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/30.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Primjeri
![Page 31: F#: Funkcijsko programiranje za .NET](https://reader033.vdocuments.net/reader033/viewer/2022052909/559913551a28ab93798b45d9/html5/thumbnails/31.jpg)
Funkcijsko programiranje F# Primjeri Resursi
Resursi
• F# Programming:http://en.wikibooks.org/wiki/F_Sharp_Programming
• F# PowerPack: http://fsharppowerpack.codeplex.com/
• hubFS: http://cs.hubfs.net/
• F# Developer Center: http://fsharp.net/
• Don Syme: http://blogs.msdn.com/b/dsyme/
• Tomas Petricek: http://tomasp.net/