wtfunctional/Notes.md
Oliver Rümpelein 37e1cda3e4 Initial Commit
* Notes for basic talk layout
 * gitignore
2016-04-19 17:13:44 +02:00

2.2 KiB

WTFunctional: Modifying your WTF-Count using functional programming

Content

  • Dafunc? Understanding functional programming with Haskell.
    • no side-effects, no mutability => maintainability
    • recursion
    • functions as first class “objects”: i.e. C++, 5; is a valid statement
    • lambdas
    • lists, maps, filters, folds => readability, less code reproduction, threadsafety…
    • currying => just convenience
    • code example: Pythagoraian triangles.
  • Phuncy: The pythonic way is functional!
    • Not strictly functional
    • recursion, fafco
    • lambda syntax
    • map, fold => example (sum of squares?)
      • python lambda syntax: lambda a,b: a+b

      • fold with reduce

      • don't return lists, but iterators!

      • Note: 2: map, filter, reduce 3: map, filter, functools.reduce()

           however, 99 percent of the time an explicit for loop is more
           readable.```
        Why use it? => Multi-processing!
        

        a = list(range(10))

        b = 0 for i in a: b += i**2 print(b)

        vs.
        

        from functools import reduce print(reduce(lambda x,y: x+y,map(lambda x: x**2,range(10))))

    • currying: not really, but binding via lambdas or functools.partial() or https://mtomassoli.wordpress.com/2012/03/18/currying-in-python/
    • decorators!
    • still FP, has advantages and is heavily used, i.e. in genomics (works on tons of lengthy lists)
  • FunCtional++: On the fast lane
    • "Classical" C++ has some functional stuff, bust i.e. no lambdas (hardly usable)
    • Changed with the new C++11-standard
    • Buzzwords:
      • map defines a Datatype in C++!
      • lambdas in C++ [](int x, int y) { return a<b;} ; [] can be used to capture variables, i.e. by reference or value
      • std::for_each from algorithm: Apply void fun(T &a) to iterator containing T values
      • std::transform from algorithm: same as for_each, but stores return value in another range
      • std::accumulate from numeric: Wants binary operation, i.e. std::minus<int>