git.fiddlerwoaroof.com
Raw Blame History

def f(h):

  def g(n):

     if n <= 1: return 1

     else: return n*h(n-1)



#def e(h):

#  def



def Y(f): 

  def g(h):  

    def i(x):

      return f(h(h))(x)

    return i

  return g(g)





@Y

def fib(f):

    def _inner(n):

        if n in range(2): return 1

        else: return f(n-1) + f(n-2)

    return _inner





import functools



def bounce(func):

  @functools.wraps(func)

  def _inner(arg):

    result = func(arg)

    return result(fact)

  return _inner



class return_if(object):

    def __init__(self, map):

        self._map = dict(

            (tuple(k) if hasattr(k, '__iter__') else (k,),v) for k,v in map.iteritems()

        )

        self._func = lambda x:x

    def _inner(self, *args):

        if args in self._map: return self._map[args]

        else: return self._func(*args)

    def __call__(self, func):

        self._func = func

        return self._inner

@bounce

@return_if({1: lambda _:1})

def fact(n):

    return lambda x: n*x(n-1)