Upload
nikola-plejic
View
707
Download
2
Embed Size (px)
Citation preview
Funkcijsko programiranje F# Primjeri Resursi
F#
Funkcijsko programiranje za .NET
Nikola Pleji¢ <[email protected]>
Web User Group, studeni 2010.
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.�
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)
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)
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
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
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
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
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
Funkcijsko programiranje F# Primjeri Resursi
FP u drugim jezicima
• C#: LINQ
• Python: list comprehensions, higher-order functions, ...
• Ruby, JavaScript...
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++
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++
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++
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++
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++
Funkcijsko programiranje F# Primjeri Resursi
Hello, World!
printfn �Hello, World!�
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
Funkcijsko programiranje F# Primjeri Resursi
F#
• ML =⇒ (O)Caml =⇒ F#
• Don Syme, Microsoft Research, Cambridge cca. 2002.
• vi²eparadigmatski
• funkcijski• objektno-orijentirani• imperativni
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
Funkcijsko programiranje F# Primjeri Resursi
F#
• stati£no i jako tipiziran1
• �poga�a� tipove: type inference2
• eksplicitna promjenjivost (keyword mutable)
1statically strongly typed2Hindley-Milner
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#
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#
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#
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#
Funkcijsko programiranje F# Primjeri Resursi
F# na Windowsima
• Visual Studio 2010
• Visual Studio 2008 uz zasebnu instalaciju
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
Funkcijsko programiranje F# Primjeri Resursi
Primjeri
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/