(i. 2 3) 1 2} 3 3$0
0 0 0
0 1 2
3 4 5
(i. 1 3) (,1)} 3 3$0
0 0 0
0 1 2
0 0 0
(i. 0 3) ''} 3 3$0
0 0 0
0 0 0
0 0 0
This is not a refutation of your suggestion - it's just showing why the
current behavior is as it is. Maybe empty cases should be treated more
leniently, as you suggest, because of the ambiguities.
If you are scatter-modifying cells of y, you are much better advised to
use rank-2 m.
Why is m} a mess? Because of what it has to do when m is heterogeneous:
(90+i.2 3) ((<0;1 2 3) , (<2 3 4;3))} i. 5 5
0 90 91 92 4
5 6 7 8 9
10 11 12 93 14
15 16 17 94 19
20 21 22 95 24
The code has to compute the index list of each atom and then modify the
atoms of y with the correct atoms of x. If the index lists get big (as
when you have a large subarray) the intermediate space can be huge.
Henry Rich
On 7/4/2022 2:43 AM, Elijah Stone wrote:
As I recall, the issue was as follows:
12 66 (2 1;0 2)} 3 3$0 NB.amend 2 atoms with 2 atoms; ok
0 0 66
0 0 0
0 12 0
(,66) (,<0 2)} 3 3$0 NB.amend 1 atom with 1 atom; ok
0 0 66
0 0 0
0 0 0
'' ''} 3 3$0 NB. amend 0 atoms with 0 atoms; not ok ??
|length error
| '' ''}3 3$0
This was generic code which needed a special case to deal with empty m.
When } encounters an empty m, it assumes m to be an empty list of
major cell indices, and errors if x does not have the appropriate
shape. I am suggesting that it should give the user the benefit of
the doubt and therefore, for empty m, if there is _any_ k such that
the amend would be valid if m selected k-cells, it should not err.
Why do you say } is a mess?
On Sun, 3 Jul 2022, Henry Rich wrote:
?
99 (i. 2 2)} i. 5 5
0 99 2 3 4
5 6 7 8 9
10 11 12 99 14
15 16 17 18 19
20 21 22 23 24
99 (i. 2 2)} i. 3 4 2
0 1
99 99
4 5
6 7
8 9
10 11
12 13
14 15
16 17
18 19
20 21
99 99
Each row of m addresses a cell of y, with rank (#$y)-({.$m).
----
This discussion ignores the main difficulty with x m} y, which is
that m { y can be all over the place. m may choose subarrays from
all over y, putting them into one array of selected index-lists. x is
then distributed across these locations, with one cell of x possibly
split across values selected by different atoms of m. It's a mess in
general.
----
Elijah, I am not opposed to making exceptions for empty selection,
but I haven't seen the value yet. You gave an example that I don't
remember exactly, where you ended up with a shape error on x, but I
concluded that you would have needed additional code even with the
proposed change. That was before I went on vacation. Can you make
the case again?
Henry Rich
()
On 7/3/2022 7:51 AM, Raul Miller wrote:
On Sun, Jul 3, 2022 at 4:44 AM Elijah Stone <elro...@elronnd.net>
wrote:
I am not sure how to feel about this. Mainly, I am not sure what the
difference is between x m}y and (for high-ranked numeric m) x (<"1
m)} y.
I
am also not sure what the difference is between your proposed
semantics
and
the existing ones.
After thinking about this a bit, ... perhaps this rephrasing will make
sense:
Before J901, m (in x m} y) indexed items of y (and position in m had
to conform with x).
My thinking here was that the leading column of a rank 2 m should
still index items of a high ranked y. In the variant introduced in
J901, that's only the case when the last dimension of m equals the
rank of y.
There's definitely some other issues to consider, involving
conformance, but I think that analogy with the J8 behavior of amend
should serve, there.
--
This email has been checked for viruses by AVG.
https://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm