Oliver Rümpelein
4110c30cc6
* Notes now is multimarkdown * Notes has "checklist" * Haskell examples are complete
2.6 KiB
2.6 KiB
Title: WTFunctional: Modifying yout WTF-Count using functional programming
Author: Oliver Rümpelein
html header:
[%title]
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
- currying => just convenience
- code example: Pythagoraian triangles, bubble sort
- 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, list comprehension 3: map, filter, functools.reduce(), list comprehension
-
The python2 to 3 page states: “Removed
reduce()
. Usefunctools.reduce()
if you really need it; however, 99 percent of the time an explicitfor
loop is more readable.” -
Why use it? => Multi-processing, WTF Count.
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>