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)
Puhuttaessa sivuvaikutuksettomista funktioista voimme itse asiassa funktion tyypistä päätellä pitkälti funktion toiminnallisuuden (ja oikeellisuuden).
“Yhdistetty funktio”: Yhdistää kaksi funktiota.- “X:lle, suorita ensin g, sitten f.”- Englanniksi: “f of g of x”
Ei olio-ohjelmoinnin jähmeyttä Mahdollistaatop-down designin
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
Itse asiassa Nullable<T> on sama asia kuin lista jossa on joko 0 tai 1 alkiota.
Lisätään asiat domainiinMuuntaminen:KäsitelläändomainiaPoistetaan asiat domainista
2: (a -> M<b>) parametri on muuntofunktio3: (b -> a -> b) funktio on koontifunktio ja b kuvaa eräänlaista kerättävää "accumulator":ia.
Näitä ketjuttamalla voimme luoda vaikka mitä (ilman muuttujaparametreja) I on turha, I 5 = S (K) (K) (5) Eräs "kirkkoherra" mm. todisti, että pelkillä funktioilla voidaan esittää numerot ja myös boolean-operaatiot. On jopa tehty ohjelmointikieli, joka perustuu näiden funktioiden kutsujen yhdistelyyn.
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