2.2 KiB
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
fromalgorithm
: Applyvoid fun(T &a)
to iterator containingT
valuesstd::transform
fromalgorithm
: same as for_each, but stores return value in another rangestd::accumulate
fromnumeric
: Wants binary operation, i.e.std::minus<int>