On Thu, Oct 23, 2014 at 7:44 AM, Marko Rauhamaa <ma...@pacujo.net> wrote: > However, the "[f, g][cond]()" technique is how pure lambda calculus > implements conditional branching so it is interesting in its own right.
I wasn't aware that lambda calculus had lists and indexing built in. > IOW, you can do "short-circuiting" in purely functional programming: > > j = j + 1 if j < 10 else 3 > > <=> > > j = (lambda: 3, lambda: j + 1)[j < 10]() The implementation given by Wikipedia (and translated into Python by me) is: >>> true = lambda x: lambda y: x >>> false = lambda x: lambda y: y >>> ifthenelse = lambda p: lambda a: lambda b: p(a)(b) >>> ifthenelse(true)(1)(2) 1 >>> ifthenelse(false)(1)(2) 2 For demonstration purposes I used Python ints as the branches rather than actual lambda calculus constructs, but this shows how selection can be done using only lambda abstractions and applications. In any case I don't see how this relates to the "[f, g][cond]()" technique of Python, unless you just meant the general approach of first selecting a function and then applying it. In that sense though, the ternary operator does the same thing; the application is just done invisibly by the language in the form of evaluating an expression as opposed to explicitly applying a function. -- https://mail.python.org/mailman/listinfo/python-list