> From: Asger Alstrup Nielsen [mailto:alstrup@sophusmedical.dk]
> It might help to illustrate one of my points by writing the
> following as
> an anonymous lambda expression:
[snip]
> My initial try to write this with LL is this:
>
> int j;
> std::for_each(v.begin(), v.end(),
> switch_statement(_1,
> case_statement<0>(_1 + 1),
> case_statement<1>(try_catch(
> bar(_1 + 3),
> catch_all(-1)
> )
> ),
> default_statement(if_then_else(_1 < 10,
> 1,
> ( j = 1,
> while_statement(_1 <
> 100,
> (j += _1,
> i /= 2
> )
> ),
> j)
> )
> )
> );
> );
>
> I can't check it because I'm stuck with VC6, but there is at least one
> error in the above. Can you spot it?
>
> I do not think this style of programming is something to encourage.
Agreed, but then again, you could have opted to have your first version of foo look like this:
void l(int i,int& j) {
while (i>100) {j+=i,i>>=1;}
}
int foo(int i) {
try {
int j=42;
return i==0?i+1:(i==1?bar(i+3):(i<10?i=1,i:j=i,l(i,j),j));
}
catch(...) {return -1;}
}
My point?
Expressive power brought by a library, or the language itself, implies a certain level of responsibility from its clients. Are there no relevant uses for these high-geared lambda expressions? I think there are, and that's what I feel is pertinent to the discussion.
> I much prefer the basic lambda library with only basic expression
> support, assignment, scoping and boost::function interaction.
Actually, I do to, but not to the degree that I feel the library should not be accepted because it includes other features (which, I might add, are features that I personally don't yet understand the full implications of).
[Note: I tried to include the same bug, did you spot it? ;-)]
Bjorn Karlsson