Skip to content

Commit 7e7a37d

Browse files
committed
functional programming features
1 parent 04d4a1c commit 7e7a37d

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

functional_program/functional_features/__init__.py

Whitespace-only changes.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
def example(a, b, **kw):
2+
return a * b
3+
4+
5+
print(type(example))
6+
print(example.__code__.co_varnames)
7+
print(example.__code__.co_argcount)
8+
9+
10+
mersenne = lambda x: 2 ** x - 1
11+
print(mersenne(17))
12+
13+
14+
year_cheese = [(2000, 29.87), (2001, 30.12), (2002, 30.6), (2003, 30.66),
15+
(2004, 31.33), (2005, 32.62), (2006, 32.73), (2007, 33.5),
16+
(2008, 32.84), (2009, 32.92)]
17+
print(max(year_cheese))
18+
print(max(year_cheese, key=lambda x: x[1]))
19+
20+
21+
def numbers():
22+
for i in range(1024):
23+
print(f'f={i}')
24+
yield i
25+
26+
27+
def sum_to(n: int) -> int:
28+
s: int = 0
29+
for i in numbers():
30+
if i == n:
31+
break
32+
else:
33+
s += i
34+
return s
35+
36+
37+
print(sum_to(5))
38+
39+
40+
41+
42+
43+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from typing import Callable
2+
3+
4+
class Mersenne1:
5+
def __init__(self, algorithm: Callable[[int], int]):
6+
self.pow2 = algorithm
7+
8+
def __call__(self, arg: int) -> int:
9+
return self.pow2(arg) - 1
10+
11+
12+
def shifty(b: int) -> int:
13+
return 1 << b
14+
15+
16+
def multy(b: int) -> int:
17+
if b == 0:
18+
return 1
19+
return 2 * multy(b - 1)
20+
21+
22+
def faster(b: int) -> int:
23+
if b == 0:
24+
return 1
25+
if b % 2 == 1:
26+
return 2 * faster(b - 1)
27+
t = faster(b // 2)
28+
return t * t
29+
30+
31+
if __name__ == '__main__':
32+
m1s = Mersenne1(shifty)
33+
m1m = Mersenne1(multy)
34+
m1f = Mersenne1(faster)
35+
36+
print(m1s(89))
37+
print(m1m(89))
38+
print(m1f(89))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def m(n: int) -> int:
2+
return 2 ** n - 1
3+

0 commit comments

Comments
 (0)