SlideShare a Scribd company logo
1 of 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

More Related Content

Viewers also liked

Resultados de encuesta a adolescentes
Resultados de encuesta a adolescentesResultados de encuesta a adolescentes
Resultados de encuesta a adolescentes
lolamirambell
 
Apresentação abralin final
Apresentação abralin   finalApresentação abralin   final
Apresentação abralin final
Karla Maria
 
Traducción wilkie menell-kinberg
Traducción wilkie   menell-kinbergTraducción wilkie   menell-kinberg
Traducción wilkie menell-kinberg
HAV
 
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
Lola Arroyo
 
Asser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad LimitadaAsser- Autónomo O Sociedad Limitada
Asser- Autónomo O Sociedad Limitada
Luis Ruiz
 

Viewers also liked (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)
 

More from Tuomas Hietanen

More from 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

Editor's Notes

  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