pdpi wrote: > On Jun 17, 5:37 pm, Lie Ryan <lie.1...@gmail.com> wrote: >> Steven D'Aprano wrote: >>> On Tue, 16 Jun 2009 22:46:14 -0700, William Clifford wrote: >>>> I was staring at a logic table the other day, and I asked myself, "what >>>> if one wanted to play with exotic logics; how might one do it?" >>> This might be useful for you, and if not useful, at least it might blow >>> your mind like it did mine. >>> (This is not original to me -- I didn't create it. However, I can't find >>> the original source.) >>> Imagine for a moment that there are no boolean values. >>> There are no numbers. They were never invented. >>> There are no classes. >>> There are no objects. >>> There are only functions. >>> Could you define functions that act like boolean values? And could you >>> define other functions to operate on them? >>> def true(x, y): >>> return x >>> def false(x, y): >>> return y >>> def print_bool(b): >>> print b("true", "false") >> String isn't considered object? >> >> Also, b/true()/false() is a function object, isn't it? Unless function >> is first-class, you can't pass them around like that, since you need a >> function pointer (a.k.a number); but if function is first-class then >> there it is an object. > > What Steven was doing was implementing some of the more basic stuff > from Lambda calculus in python. If you're implementing a different > system in an existing language, you'll need to use _some_ facilities > of the original language to interface with the outside world. Anyway, > here's a sample interactive session I just tried: > >>>> def a(stuff): > .... print stuff > .... >>>> def b(stuff): > .... stuff("abc") > .... >>>> b(a) > abc > > functions are first-class citizens in python.
I've just reread my sentence, and even I wouldn't have understood (or would misunderstood) what I was talking about if it was worded like that. What I meant was: if you can pass a function as an argument to another function, that means either: 1) you must use function pointer (numbers) or 2) function is a first-class object. Both violates the restriction (no number and no object respectively). Even after abandoning the semantics of functions in python, going to function as in purely mathematical sense, I still am not convinced (warning: I don't know lambda calculus, although I program in heavily functional style). PS: the string comment was meant to be a joke... -- http://mail.python.org/mailman/listinfo/python-list