In data 3/19/2005, "Christian Neukirchen" <chneukirchen / gmail.com> ha
scritto:

>Navindra Umanee <navindra / cs.mcgill.ca> writes:
>
>> Christian Neukirchen <chneukirchen / gmail.com> wrote:
>>> > Yeah, sorry for being unclear.  I was referring to higher-order
>>> > functions i.e. Ruby blocks allow you to pass one anonymous lambda to a
>>> > higher-order function with convenient syntax...  for more than that it
>>> > gets less convenient.
>>>
>>> This apparently got better with the anonymous blocks recently imported
>>
>> I'm not sure how that could be improved, since it's already doing what
>> it was designed to do.
>
>I think you can write  foo {|x|...}, {|y|...}  with recent CVS.

I'd rather see simple first-order functions/methods although this
is certainly an improvement.

>>> in CVS, but I didn't try that yet.  It's a restriction by design,
>>> though.
>>
>> Sure, that's why I called it syntactic sugar.  It takes what Matz
>> thought would or should be a common case use of lambda/higher-order
>> functions in Ruby and makes it convenient.
>
>Exactly.  Although Smalltalk doesnt suffer from "easy" (multiple) block
>syntax.  It needs #call^Wdo, too.
>
>> I presume Guido is doing the same thing in his own way.  He's making
>> it convenient to do things people might otherwise do with lambda.  Of
>> course, he's going the other way and shunning lambda altogether...  so
>> he's not looking for Lisp/Scheme fans but apparently catering to
>> another demographic.  Afterall, there are plenty of successful
>> languages without lambda.
>
>For differing values of "successful".  I think it is a well-known fact
>that lambdas (and closures) are a powerful way of abstraction.  He
>*could* easily have them (and whom would they hurt?)...
>
>All in all, I can't think of any language that gets better because it
>loses lambdas. :-)
>
>>> >> You cannot do lambda{|x|x*2}(2), yes.
>>> >
>>> > Yup, and for calling functions objects in general.
>>>
>>> Yes.  And actually this is proper OO.  I couldn't justify mylambda()
>>> somehow.
>>
>> Proper OO?  Um, well how can you justify:
>>
>> a = [1, 2]
>> a[1]
>>
>> but not:
>>
>> a = lambda{|x|x*2}
>> a(1)
>
>Ever tried a[1]?

Yes, but since it looks like indexing and forces to
go back and find out what 'a' is, operator() would
be extremely useful. We will hopefully see that based
on recent comments by matz-uo[1].

>>> Fixing lambdas wouldn't have been an option, of course. :P
>>
>> ;-)
>
>> Cheers,
>> Navin.
>--
>Christian Neukirchen  <chneukirchen / gmail.com>  http://chneukirchen.org

E

[1] http://redhanded.hobix.com/inspect/functionCall.html