On Tue, 04 Jan 2005 19:31:37 +1000, Nick Coghlan <[EMAIL PROTECTED]> wrote:
>Steven Bethard wrote: >> Nick Coghlan: def-from syntax [4] >> (def f(a) + o(b) - o(c) from (a, b, c)) >> (def x * x from (x)) >> (def x from ()) >> (def x.bar(*a, **k) from (*a, **k)) >> ((def x(*a, **k) from ()) for x, a, k in funcs_and_args_list) > >After a bit more musing, this is definitely my preferred syntax. I'd call it a >'deferred expression' rather than an anonymous function, though. The name >change >may seem minor, but it changes the emphasis of the feature from how it's >implemented to what it is useful for (i.e. deferring evaluation of an >expression >until call time). I like the fact that 'def' can serve as a mnemonic for 'defer' or 'deferred' ;-) OTOH, I like concise notation for expressions, and the def and from aren't really necessary if you can tag the first expression with some syntax marker. I suggested (: rather than (def since (: is illegal now and won't break anything. But all this is just a rewrite of lambda params:expr as (def expr from params). What is the point again? (Not that my rewrite to (:expr)(params) is any more than a lambda rewrite either). If backticks could be used, `(expr:params) might be an interesting spelling of lambda params:expr. I do like being able to leave out the from clause. `(expr) would let you do that too, just as well as (:expr). > >It's also conducive to a clean no-argument syntax - simply make the 'from' >claus >optional when the argument list is empty. That is an advantage of having it inside the outer parens, which my (:expr)(params) couldn't benefit from -- unless I just take your format and substitute ':' for both def and from: (: f(a) + o(b) - o(c) : (a, b, c)) (: x * x : (x)) (: x) # empty arg list (: x.bar(*a, **k) : (*a, **k)) ((: x(*a, **k) : (x=x, a=a, k=k) for x, a, k in funcs_and_args_list) > >'def' and 'from' are already keywords, so there shouldn't be any compatibility >problems. > >Michael Spencer's idea of using 'for' instead of 'from' was quite interesting, >but the use of 'for' without a corresponding 'in' feels a bit misleading :) What was the point of all this again? Pretending lambda goes away without really killing it? ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list