Skip to content

Instantly share code, notes, and snippets.

@marchdown
Created November 21, 2014 09:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marchdown/56d00160622a9d24b36b to your computer and use it in GitHub Desktop.
Save marchdown/56d00160622a9d24b36b to your computer and use it in GitHub Desktop.
from functools import partial
def reduce(reducing_function, fs, initial_value=None):
fs = iter(fs)
v = fs.next() if initial_value is None else initial_value
for f in fs:
v = reducing_function(v, f)
return v
square = lambda x: x**2
def s(n):
res = str(n+0)
print "s"
return res
def map_f(f):
res = partial(map, f)
print "map_f"
return res
def compose(*fs):
def comp2(f,g):
res = lambda x: f(g(x))
print "comp2"
return res
return reduce(comp2, fs)
# int -> int
# by the way of
# int -> [char] -> [int] -> [char] -> int
# int, str, partial(map(lambda x:int(x)**2)), str
squareDigits = compose(int, map_f(str), map_f(square), s)
################ trace:
# > squareDigits(9119)
# map_f
# map_f
# comp2
# comp2
# comp2
# s
# Traceback:
# in
# in
# in
# in
# TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment