Skip to content

Instantly share code, notes, and snippets.

@tomjnixon
Last active August 30, 2017 12:04
Show Gist options
  • Save tomjnixon/e7af088ffcb1c19fef5ce181e50650c9 to your computer and use it in GitHub Desktop.
Save tomjnixon/e7af088ffcb1c19fef5ce181e50650c9 to your computer and use it in GitHub Desktop.
cons = lambda a, b: lambda x: a if x else b
Y = lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y)))
pretty = lambda l: "(" + Y(lambda f: lambda l: cons(lambda: str(l(1)) + cons(" ", "")(l(0)) + f(l(0)), lambda: ")")(l)())(l)
reverse = Y(lambda f: lambda k: lambda l: cons(lambda: f(cons(l(1), k))(l(0)), lambda: k)(l)())(None)
assert pretty(cons(1, cons(2, cons(3, None)))) == "(1 2 3)"
assert pretty(reverse(cons(1, cons(2, cons(3, None))))) == "(3 2 1)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment