SlideShare une entreprise Scribd logo
1  sur  20
F# funktioteoriaa
F# tyyppijärjestelmä
//Sulutus ei ole pakollista: letf(x,y) = x+y let f x y  = x+y
//Funktion tyyppi: let I x = x //    x: 'a //    I: 'a -> 'a
//Esimerkki 2: let K x y = x //      x: 'a //      y: 'b //      K: 'a -> 'b -> 'a
//Osittainen suoritus letvakioMoi= K "Moi” let moi = vakioMoi123 valvakioMoi : (int -> string) //moi :string ="Moi”
//Esimerkki 3: let S x y z = x(z)(y(z)) //        x:  f(a  b) //        x:  a -> b -> c //        z:  a //        y:  a -> b S x y z: (a -> b -> c) -> (a -> b) -> a -> c
//Harjoitus: Mitä oheiset funktiot tekevät? val it :  (('a -> 'b) -> 'a list -> 'b list) val it :  (('a -> 'b -> 'a) -> 'a -> 'b list -> 'a) val it : ('a * 'b -> 'a)
f(g(x)) F# function composition
//function composition let yhdistä f g x = g(f(x))  let yhdistä f g x = (f>>g)x //        f:  'a -> 'b //        g:  'b -> 'c //        x:  'a yhdistä f g x: (a -> b) -> (b -> c) -> a -> c
//Jälkimmäisestä voi repiä parametrin pois let yhdistä f g= (f>>g) // yhdistä: ('a -> 'b) ->             ('b -> 'c) ->             ('a -> 'c)
     lopputulos: yleiskäyttöinen         abstraktio     sitoutumattakonkreettisiin      tyyppeihin let käsittele = (tallenna >> validoi >> lähetä)
F# monadit
ajatus LINQ:n takana “list monad”IEnumerable<T> “maybe monad”Nullable<T> …
kolmen tyyppisiä operaatioita 1. 3. 'a -> M<’a> M<'a> -> 'b 2. M<'a> -> M<'b>
tyyppiesimerkit 2. M<'a> -> ('a -> M<'b>) -> M<'b> 3. M<'a> ->  'b -> ('b -> 'a -> 'b) -> 'b
F# kombinaattorit
S- K- I- kombinaattorit Kuten alussa: I x = x K x y = x S x y z =     x z (y z)
y-kombinaattori f(x) kun x=f? f(f) = f  ja  f=f(f) f(g) = g(f(g)) Y = S (K (S I I)) (S (S (K S) K) (K (S I I)))
lähteet / linkit http://en.wikipedia.org/wiki/SKI_combinator_calculus http://en.wikipedia.org/wiki/Fixed_point_combinator http://community.bartdesmet.net/blogs/bart/archive/2009/08/17/mis-using-c-4-0-dynamic-type-free-lambda-calculus-church-numerals-and-more.aspx http://blogs.msdn.com/b/madst/archive/2007/05/11/recursive-lambda-expressions.aspx http://www.madore.org/~david/programs/unlambda/ http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Greg-Meredith-Monadic-Design-Patterns-for-the-Web-Introduction-to-Monads http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-MinLINQ-The-Essence-of-LINQ http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf http://www.meetup.com/FSharpHelsinki/messages/boards/forum/1395955

Contenu connexe

En vedette

Resultados de encuesta a adolescentes
Resultados de encuesta a adolescentesResultados de encuesta a adolescentes
Resultados de encuesta a adolescenteslolamirambell
 
Jornal zoada bonita JANEIRO 2013
Jornal zoada bonita JANEIRO 2013 Jornal zoada bonita JANEIRO 2013
Jornal zoada bonita JANEIRO 2013 paulo maia
 
Apresentação abralin final
Apresentação abralin   finalApresentação abralin   final
Apresentação abralin finalKarla Maria
 
Traducción wilkie menell-kinberg
Traducción wilkie   menell-kinbergTraducción wilkie   menell-kinberg
Traducción wilkie menell-kinbergHAV
 
Mr. pentland, el forjador del carácter
Mr. pentland, el forjador del carácterMr. pentland, el forjador del carácter
Mr. pentland, el forjador del carácterLola Arroyo
 
mensaje motivacional oliver
mensaje motivacional olivermensaje motivacional oliver
mensaje motivacional oliveroliveraroche1996
 
Asser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad LimitadaAsser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad LimitadaLuis Ruiz
 
Esmalte de unhas dose única (du.e)
Esmalte de unhas dose única (du.e)Esmalte de unhas dose única (du.e)
Esmalte de unhas dose única (du.e)Ani Inventores
 

En vedette (15)

Resultados de encuesta a adolescentes
Resultados de encuesta a adolescentesResultados de encuesta a adolescentes
Resultados de encuesta a adolescentes
 
Ramadevi
RamadeviRamadevi
Ramadevi
 
Jornal zoada bonita JANEIRO 2013
Jornal zoada bonita JANEIRO 2013 Jornal zoada bonita JANEIRO 2013
Jornal zoada bonita JANEIRO 2013
 
Apresentação abralin final
Apresentação abralin   finalApresentação abralin   final
Apresentação abralin final
 
Traducción wilkie menell-kinberg
Traducción wilkie   menell-kinbergTraducción wilkie   menell-kinberg
Traducción wilkie menell-kinberg
 
Taxis
TaxisTaxis
Taxis
 
Mr. pentland, el forjador del carácter
Mr. pentland, el forjador del carácterMr. pentland, el forjador del carácter
Mr. pentland, el forjador del carácter
 
Cuprinsul!
Cuprinsul!Cuprinsul!
Cuprinsul!
 
mensaje motivacional oliver
mensaje motivacional olivermensaje motivacional oliver
mensaje motivacional oliver
 
Bestech Ananda | Ananda
Bestech Ananda |  AnandaBestech Ananda |  Ananda
Bestech Ananda | Ananda
 
Azaroaren 25eko gehigarria 2014
Azaroaren 25eko gehigarria 2014Azaroaren 25eko gehigarria 2014
Azaroaren 25eko gehigarria 2014
 
Asser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad LimitadaAsser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad Limitada
 
BusinessWeek; Bloomberg subscription
BusinessWeek; Bloomberg subscriptionBusinessWeek; Bloomberg subscription
BusinessWeek; Bloomberg subscription
 
Privé reis krugerpark
Privé reis krugerparkPrivé reis krugerpark
Privé reis krugerpark
 
Esmalte de unhas dose única (du.e)
Esmalte de unhas dose única (du.e)Esmalte de unhas dose única (du.e)
Esmalte de unhas dose única (du.e)
 

Plus de Tuomas Hietanen

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Tuomas Hietanen
 
Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Tuomas Hietanen
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Tuomas Hietanen
 
Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Tuomas Hietanen
 
F# references (and some misc slides)
F# references (and some misc slides)F# references (and some misc slides)
F# references (and some misc slides)Tuomas Hietanen
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#Tuomas Hietanen
 
Pari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-ReferenssejäPari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-ReferenssejäTuomas Hietanen
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesTuomas Hietanen
 

Plus de Tuomas Hietanen (14)

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)
 
Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...
 
Message passing & NoSQL (in English)
Message passing & NoSQL (in English)Message passing & NoSQL (in English)
Message passing & NoSQL (in English)
 
Function therory
Function theroryFunction therory
Function therory
 
The Pain Points of C#
The Pain Points of C#The Pain Points of C#
The Pain Points of C#
 
F# references (and some misc slides)
F# references (and some misc slides)F# references (and some misc slides)
F# references (and some misc slides)
 
Linq in practice
Linq in practiceLinq in practice
Linq in practice
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#
 
Pari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-ReferenssejäPari sekalaista diaa ja F#-Referenssejä
Pari sekalaista diaa ja F#-Referenssejä
 
F# ja C# yhteiskäyttö
F# ja C# yhteiskäyttöF# ja C# yhteiskäyttö
F# ja C# yhteiskäyttö
 
C# nykyiset kipupisteet
C# nykyiset kipupisteetC# nykyiset kipupisteet
C# nykyiset kipupisteet
 
LINQ käytännössä
LINQ käytännössäLINQ käytännössä
LINQ käytännössä
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & Practices
 

Funktioteoriaa

  • 3. //Sulutus ei ole pakollista: letf(x,y) = x+y let f x y = x+y
  • 4. //Funktion tyyppi: let I x = x // x: 'a // I: 'a -> 'a
  • 5. //Esimerkki 2: let K x y = x // x: 'a // y: 'b // K: 'a -> 'b -> 'a
  • 6. //Osittainen suoritus letvakioMoi= K "Moi” let moi = vakioMoi123 valvakioMoi : (int -> string) //moi :string ="Moi”
  • 7. //Esimerkki 3: let S x y z = x(z)(y(z)) // x: f(a b) // x: a -> b -> c // z: a // y: a -> b S x y z: (a -> b -> c) -> (a -> b) -> a -> c
  • 8. //Harjoitus: Mitä oheiset funktiot tekevät? val it : (('a -> 'b) -> 'a list -> 'b list) val it : (('a -> 'b -> 'a) -> 'a -> 'b list -> 'a) val it : ('a * 'b -> 'a)
  • 9. f(g(x)) F# function composition
  • 10. //function composition let yhdistä f g x = g(f(x)) let yhdistä f g x = (f>>g)x // f: 'a -> 'b // g: 'b -> 'c // x: 'a yhdistä f g x: (a -> b) -> (b -> c) -> a -> c
  • 11. //Jälkimmäisestä voi repiä parametrin pois let yhdistä f g= (f>>g) // yhdistä: ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c)
  • 12. lopputulos: yleiskäyttöinen abstraktio sitoutumattakonkreettisiin tyyppeihin let käsittele = (tallenna >> validoi >> lähetä)
  • 14. ajatus LINQ:n takana “list monad”IEnumerable<T> “maybe monad”Nullable<T> …
  • 15. kolmen tyyppisiä operaatioita 1. 3. 'a -> M<’a> M<'a> -> 'b 2. M<'a> -> M<'b>
  • 16. tyyppiesimerkit 2. M<'a> -> ('a -> M<'b>) -> M<'b> 3. M<'a> -> 'b -> ('b -> 'a -> 'b) -> 'b
  • 18. S- K- I- kombinaattorit Kuten alussa: I x = x K x y = x S x y z = x z (y z)
  • 19. y-kombinaattori f(x) kun x=f? f(f) = f ja f=f(f) f(g) = g(f(g)) Y = S (K (S I I)) (S (S (K S) K) (K (S I I)))
  • 20. lähteet / linkit http://en.wikipedia.org/wiki/SKI_combinator_calculus http://en.wikipedia.org/wiki/Fixed_point_combinator http://community.bartdesmet.net/blogs/bart/archive/2009/08/17/mis-using-c-4-0-dynamic-type-free-lambda-calculus-church-numerals-and-more.aspx http://blogs.msdn.com/b/madst/archive/2007/05/11/recursive-lambda-expressions.aspx http://www.madore.org/~david/programs/unlambda/ http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Greg-Meredith-Monadic-Design-Patterns-for-the-Web-Introduction-to-Monads http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-MinLINQ-The-Essence-of-LINQ http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf http://www.meetup.com/FSharpHelsinki/messages/boards/forum/1395955

Notes de l'éditeur

  1. Puhuttaessa sivuvaikutuksettomista funktioista voimme itse asiassa funktion tyypistä päätellä pitkälti funktion toiminnallisuuden (ja oikeellisuuden).
  2. “Yhdistetty funktio”: Yhdistää kaksi funktiota.- “X:lle, suorita ensin g, sitten f.”- Englanniksi: “f of g of x”
  3. Ei olio-ohjelmoinnin jähmeyttä Mahdollistaatop-down designin
  4. Usein haluamme liittää toisiinsa asioita, jotka eivät ihan suoraa liity toisiinsa…Monad käsite on Haskell:ista lähtöisin ja siellä oikeastaan ainoa tapa sivuvaikutuksien suoritukselle
  5. Itse asiassa Nullable&lt;T&gt; on sama asia kuin lista jossa on joko 0 tai 1 alkiota.
  6. Lisätään asiat domainiinMuuntaminen:KäsitelläändomainiaPoistetaan asiat domainista
  7. 2: (a -&gt; M&lt;b&gt;) parametri on muuntofunktio3: (b -&gt; a -&gt; b) funktio on koontifunktio ja b kuvaa eräänlaista kerättävää &quot;accumulator&quot;:ia.
  8. Näitä ketjuttamalla voimme luoda vaikka mitä (ilman muuttujaparametreja) I on turha, I 5 = S (K) (K) (5) Eräs &quot;kirkkoherra&quot; mm. todisti, että pelkillä funktioilla voidaan esittää numerot ja myös boolean-operaatiot. On jopa tehty ohjelmointikieli, joka perustuu näiden funktioiden kutsujen yhdistelyyn.
  9. Mitä jos f(x) funktiolle antaa parametriksi itsensä, eli f:än? Syntyy rekursio ja ikiluuppi… Luupin ja lopetusehdon voi jakaa omiksi funktioikseenY saadaan tietysti aikaan myös SKI-kalkyylilla