Skip to content

Instantly share code, notes, and snippets.

@fcostin
Created November 16, 2012 13:04
Show Gist options
  • Save fcostin/4087197 to your computer and use it in GitHub Desktop.
Save fcostin/4087197 to your computer and use it in GitHub Desktop.
def make_display():
def naturals():
i = 0
while True:
yield i
i += 1
i = iter(naturals())
def display(a, b):
print 'example %d:' % next(i)
print 'a:\t%s' % a
print 'b:\t%s' % b
return display
display = make_display()
a = [4, 3, 2, 1, 0]
b = [0, 0, 0, 0, 0]
for i in xrange(5):
if i % 2 == 0:
b[i] = 2 * a[i] + 7
else:
b[i] = a[i - 1]
display(a, b)
a = [4, 3, 2, 1, 0]
b = [0] * len(a)
for i in xrange(len(a)):
if i % 2 == 0:
b[i] = 2 * a[i] + 7
else:
b[i] = a[i - 1]
display(a, b)
a = range(5)[::-1]
b = [0] * len(a)
for i in xrange(len(a)):
if i % 2 == 0:
b[i] = 2 * a[i] + 7
else:
b[i] = a[i - 1]
display(a, b)
import numpy
a = numpy.arange(5)[::-1]
b = numpy.zeros_like(a)
for i in xrange(len(a)):
if i % 2 == 0:
b[i] = 2 * a[i] + 7
else:
b[i] = a[i - 1]
display(a, b)
import numpy
a = numpy.arange(5)[::-1]
b = numpy.zeros_like(a)
indices = numpy.arange(len(a))
evens = indices % 2 == 0
odds = indices % 2 == 1
b[evens] = 2 * a[evens] + 7
prev_indices = indices - 1
b[odds] = a[prev_indices[odds]]
display(a, b)
a = numpy.arange(5)[::-1]
indices = numpy.arange(len(a))
evens = indices % 2 == 0
prev_indices = indices - 1
b = numpy.where(evens, 2 * a + 7, a[prev_indices])
display(a, b)
a = numpy.arange(5)[::-1]
indices = numpy.arange(len(a))
evens = indices % 2 == 0
b = numpy.where(evens, 2 * a + 7, numpy.roll(a, 1))
display(a, b)
a = numpy.arange(5)[::-1]
b = numpy.where(numpy.arange(len(a)) % 2 == 0, 2 * a + 7, numpy.roll(a, 1))
display(a, b)
odd_indices = lambda a : numpy.arange(len(a)) % 2 == 0
double_ay_seven = lambda a: 2 * a + 7
prev = lambda a : numpy.roll(a, 1)
g = lambda a : numpy.where(odd_indices(a), double_ay_seven(a), prev(a))
a = numpy.arange(5)[::-1]
display(a, g(a))
odd = lambda x : x % 2 == 0
indices = lambda a : numpy.arange(len(a))
double_ay_seven = lambda a: 2 * a + 7
prev = lambda a : numpy.roll(a, 1)
g = lambda a : numpy.where(odd(indices(a)), double_ay_seven(a), prev(a))
a = numpy.arange(5)[::-1]
display(a, g(a))
odd = lambda x : x % 2 == 0
indices = lambda a : numpy.arange(len(a))
double_ay_seven = lambda a: 2 * a + 7
prev = lambda a : numpy.roll(a, 1)
g = lambda a : numpy.where(odd(indices(a)), double_ay_seven(a), prev(a))
image = lambda f : lambda x : (x, f(x))
a = numpy.arange(5)[::-1]
display(*(image(g)(a)))
compose = lambda f, g : lambda x : f(g(x))
odd = lambda x : x % 2 == 0
indices = compose(numpy.arange, len)
double_ay_seven = lambda a: 2 * a + 7
prev = lambda a : numpy.roll(a, 1)
star = lambda f : lambda xs : f(*xs)
dual_eval = lambda x : lambda f : f(x)
g = lambda a : star(numpy.where)(map(dual_eval(a), (compose(odd, indices), double_ay_seven, prev)))
image = lambda f : lambda x : (x, f(x))
a = numpy.arange(5)[::-1]
display(*(image(g)(a)))
compose = lambda f, g : lambda x : f(g(x))
odd = lambda x : x % 2 == 0
indices = compose(numpy.arange, len)
double_ay_seven = lambda a: 2 * a + 7
identity = lambda x : x
dual_eval = lambda x : lambda f : f(x)
constant = lambda c : lambda x : c
entuple = lambda fs : lambda a : map(dual_eval(a), fs)
star = lambda f : lambda xs : f(*xs)
unstar = lambda f : lambda *xs : f(xs)
prev = compose(star(numpy.roll), unstar(entuple)(identity, constant(1)))
g = lambda a : star(numpy.where)(map(dual_eval(a), (compose(odd, indices), double_ay_seven, prev)))
image = lambda f : lambda x : (x, f(x))
a = numpy.arange(5)[::-1]
star(display)(image(g)(a))
_eval = lambda f, *xs : f(*xs)
swap = lambda a, b : (b, a)
identity = lambda x : x
_compose = lambda f, g, *x : f(g(*x))
partial1 = lambda f : lambda first : lambda *rest : f(first, *rest)
partial2 = lambda f : lambda first, second : lambda *rest : f(first, second, *rest)
_star = lambda f, xs : f(*xs)
star = partial1(_star)
_unstar = lambda f, *xs : f(xs)
unstar = partial1(_unstar)
compose = partial2(_compose)
dual_eval = partial1(compose(star(_eval), swap))
project = lambda a, *xs : a
constant = partial1(project)
_entuple = lambda fs, a : map(dual_eval(a), fs)
entuple = partial1(_entuple)
image = lambda f : entuple((identity, f))
odd = lambda x : x % 2 == 0
indices = compose(numpy.arange, len)
double_ay_seven = lambda a: 2 * a + 7
prev = compose(star(numpy.roll), unstar(entuple)(identity, constant(1)))
g = lambda a : star(numpy.where)(map(dual_eval(a), (compose(odd, indices), double_ay_seven, prev)))
a = numpy.arange(5)[::-1]
star(display)(image(g)(a))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment