
On 08/25/11 15:16, Dave Abrahams wrote:
on Thu Aug 25 2011, Eric Niebler <eric-AT-boostpro.com> wrote:
On 8/24/2011 6:15 PM, Dave Abrahams wrote:
on Wed Aug 24 2011, "Peter Dimov" <pdimov-AT-pdimov.com> wrote:
Dave Abrahams wrote:
I suppose the symmetrical non-lazy version looks like:
f(x) => doesn't call f f(x)(y) => doesn't call f f(x)(y)(z) => doesn't call f f(x)(y)(z)() => calls f
I simply don't see the problem with:
f(x) ==> curry f(x, y) or f(x)(y) ==> curry f(x, y, z) or etc. ==> evaluate
Can you say specifically what you think the problem is?
It just rubs me the wrong way that sometimes passing arguments to a function has no execution semantics, but if you happen to complete an argument list, suddenly it's called.
[snip] Since an n-dimensional array can be thought of as a function of n indexes, I would think then that subscripting multi-dimensional arrays would rub you the wrong way: int f[1][1][1]; f[0] => doesn't return an int f[0][0] => doesn't return an int f[0][0][0] => *does* return an int Instead, would you prefer the following symmetrical version? f[0] => doesn't return an int f[0][0] => doesn't return an int f[0][0][0] => doesn't return an int f[0][0][0]() => *does* return an int -regards, Larry