Re: Closures: summarizing suggestions a bit...

Alexey Zinger <inline_four-/[email protected]> Thu, 3 Feb 2005 13:46:21 -0800 (PST)
Newsgroups gmane.comp.java.beanshell.devel
Message-ID <[email protected]>
Gets my vote.  I was about to say why not go with Perl-like subroutine
references, but this is basically the same syntax.

--- Slava Pestov <[email protected]> wrote:

> Hi all,
> 
> I suggest a syntax for closures, somewhat inspired by Common Lisp, where 
> refer to a function object, either named or anonymous, you write #'foo, 
> where foo is either a function name, or an anonymous function block 
> ("lambda").
> 
> While #' is a bit ackward, in BeanShell you can reserve the 
> currently-unused @ character to look up inside the function namespace -- 
> giving the ability to have function object literals. Using @ in a C like 
> language is not that weird, and Objective C uses this character.
> 
> So, suppose you had a function map() that took a list and a function, 
> and returned a new list. You could do:
> 
> sq(x) { return x*x; }
> 
> map(list,@sq);
> 
> For anonymous closures, just use a syntax like
> 
> map(list,@(x) { return x*x; });
> 
> So its @(arguments) { body }
> 
> (in Common Lisp, its #'(lambda (x y) (+ x y)) -- notice the parallel...).
> 
> Now, I missed method literals. What you could do is return an object 
> that is internally a pair; a 'this', and a BeanShell method to invoke. 
> So the syntax could be like:
> 
> map(list,myObj.@foo);
> 
> Where myObj.@foo is an object that when called in some way, invokes 
> myObj.foo(...).
> 
> To call a method, function or closure, i think its ok to call the 'do' 
> method on it, like in SmallTalk.
> 
> void map(list,closure)
> {
>      for(i = 0; i < list.size(); i++)
>          list.set(i,closure.do(list.get(i)));
> }
> 
> I hope my proposal is considered. I think overloading an unused 
> punctuation character is the best way to implement anonymous closures 
> and methods-as-arguments while maintaining brevity, without creating 
> ambiguous situations.
> 
> Patrick Niemeyer wrote:
> > Just to summarize a few of the alternate suggestions:
> > 
> > // Extended method-like syntax:
> > callable( ... );
> > callable( arg, ... );
> > 
> > 
> > // Anonymous inner class-like syntax:
> > () { ... }
> > (arg) { ... }
> > 
> > 
> > // Multiple curly brace syntax:
> > {{ ... }}
> > { arg { ... } }
> > 
> > 
> > 
> > Pat
> > 
> > 
> > 
> > -------------------------------------------------------
> > This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
> > Tool for open source databases. Create drag-&-drop reports. Save time
> > by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
> > Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> > _______________________________________________
> > Beanshell-developers mailing list
> > Beanshell-developers-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> > https://lists.sourceforge.net/lists/listinfo/beanshell-developers
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
> Tool for open source databases. Create drag-&-drop reports. Save time
> by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
> Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> _______________________________________________
> Beanshell-developers mailing list
> Beanshell-developers-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> https://lists.sourceforge.net/lists/listinfo/beanshell-developers
> 


=====
Alexey
Briggs & Stratton
1988 Kawasaki EX500 (CCS)
http://bsheet.sourceforge.net

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl