Skip to content

Instantly share code, notes, and snippets.

@davidrusu
Last active January 11, 2018 16:49
Show Gist options
  • Save davidrusu/507cfe0eee605ae8032fedcc679ebb07 to your computer and use it in GitHub Desktop.
Save davidrusu/507cfe0eee605ae8032fedcc679ebb07 to your computer and use it in GitHub Desktop.
steppers
from random import random
def busy_block(stepper):
res = None
while stepper is not None:
stepper, res = stepper()
print(res)
return res
def bind(stepper, dependent_stepper_maker):
def wrapper():
next_stepper, res = stepper()
if next_stepper is None:
return (dependent_stepper_maker(res), res)
else:
return (bind(next_stepper, dependent_stepper_maker), res)
return wrapper
def count_steps(stepper, n=1):
def wrapper():
(next_stepper, res) = stepper()
if next_stepper is None:
return (None, (res, n))
else:
return (count_steps(next_stepper, n + 1), (res, n))
return wrapper
def rand_step():
v = random()
if v < 0.9:
return (rand_step, v)
else:
return (None, v)
def build_next_stepper(res):
v, n = res
if n != 1:
return bind(count_steps(rand_step), build_next_stepper)
else:
return None
busy_block(bind(count_steps(rand_step), build_next_stepper))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment