# [Issue 3395] Ambiguous array operations

`http://d.puremagic.com/issues/show_bug.cgi?id=3395`
```

Stewart Gordon <s...@iname.com> changed:

----------------------------------------------------------------------------
CC|                            |s...@iname.com

--- Comment #2 from Stewart Gordon <s...@iname.com> 2011-11-29 13:31:26 PST ---
> These expressions are ambiguous:
> ---
> a[].max(n);
> a[1..4].max(n);
> ---
> Does it mean calling the function on the slice or on each item in the slice?

It means calling the function on the slice.  Unless I'm mistaken, there isn't
any D syntax at the moment that means calling the function on each element of
the array.

> Possible solution is to change the meaning of empty square brackets from full
> slice to only a hint for array operation so that a[].max(n) is an array
> operation and a[1..4].max(n) is max(a[1..4],n).

This would get confusing.  You might want to apply a function to the whole
slice [1..4] or to each element of the slice.  This applies whether the
array-property sugar is being used or not.

Perhaps the best solution is to define [] applied to the function identifier
itself to do an elementwise application.

So max(a, n) or a.max(n) would just call max(a, n) once.
And max[](a, n) or a.max[](n) would evaluate to an array of max(a[i], n).
And the same if a is replaced with a[], a[1..4] or some such in each case.

Of course, ambiguities can still occur in functions with multiple array
parameters.  Presumably the language would forbid it in these ambiguous cases,