Anzeige
Anzeige

Functional programming

1. Functional Programming Bas Bossink April 2010
2. Contents Introduction Deﬁnition History Taxonomy Features Functional concepts When to use it? When not to use it? Resources
3. Introduction Disclaimer Inventory Anecdote About GFDL on github libre tools
4. Deﬁnition Functions are central construct Functions are regular values passed around returned composed (partially) applied No variables but binding of values all variables are immutable
5. Deﬁnition of a Function Functions are mathematical
6. Example Figure 1:
7. Non-example Figure 2:
8. Deﬁnition of a Function Same input -> same output No side eﬀects, pure
9. History Lambda calculus Alonzo Church 1930s untyped lambda calculus simply typed lambda calculus Figure 3:
10. Taxonomy Group functional languages across several axis: Statically typed / Dynamically typed Strong typing / Weak typing Lazy / Eager Single paradigm / Multi paradigm
11. Taxonomy
12. Taxonomy
13. Features Read Eval Print Loop (REPL) Type inference (var on steroids) Pattern matching Algabraic data types Function composition Anonymous functions (lambda expressions) Closure
14. Features Sequence Epressions (List Comprehensions) Partial function application (currying) Higher order functions (map, fold, ﬁlter)
15. Funtional concepts Tail Recursion Continuation passing style Memoization
16. Computation Expressions (Monads) Concept from mathematics, Category theory A triple: type constructor bind aka chain operation return aka inject operation
17. Category a collection of elements a collection of morphisms (think function) a notion of composition of these morphisms Example Grp, Set, Hask
18. Functor Transformation between categories Given category C, D, functor F F : C -> D f: A -> B then F(f) -> F(A) -> F(B) Examples: F: Grp -> Set, forgetful functor
19. Monad Functor: M: C -> C unit: X -> M(X) join: M(M(X)) -> M(X)
20. Monads class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a instance Monad [] where return x = [x] xs >>= f = concat (map f xs)
21. When to use it? stateless data-transformations calculation /scientiﬁc computing parrallellism
22. When not to use it? a lotta state gui’s