As a more general comment relating to these sorts of issues, I offer the following opinion.
I imagine that there are many variations that can legitimately be argued. Where one lands on an issue is somewhat arbitrary. In some instances, X is better and makes more sense. And in other instances, Y makes more sense. Sometimes the answer is logically clear but more often not. For better or worse, given its somewhat "standard-setting" regard, I think of IBM's APL-2 as "the standard". For me, it's not a matter of who is right. That can be debated ad nauseam. I just consider IBM APL-2 APL-2. All else are variations on a theme. It is my understanding that one of the main goals of GNU APL is to provide an open-source implementation of IBM APL-2. If one were looking for a platform to do explorations in the APL space, we already have NARS2000, KAP, and other vendors to a lesser degree. I do not think GNU APL was attempting the same thing. If I am correct, these sorts of debates are far simpler. We don't debate the various merits. Rather, we simply compare the results with IBM APL-2. Case closed. Also, if my view of GNU APL is correct, I like this fact a lot! For better or worse, it works a specific way and won't change because someone has a good example and argument. I am interested in stability and reliability. Just an opinion. Blake McBride On Wed, Jan 26, 2022 at 2:47 PM Dr. Jürgen Sauermann < mail@jürgen-sauermann.de> wrote: > Hi Elias, > > I suppose the reason is roughly this: > > Some interpreter, including IBM APL2 and GNU APL, sometimes > allow 1-element vertors (lets call them quasi-scalars) in places > where strictly speaking scalars would be required. > > Your partial results 0/x if some a=0 is always a vector while 1/x > for some other a-1 is always 1 1-element vector which is subject > to be being treated as a scalar instead. > > When the the inner product f.g and the outer product ∘.g gets > a non-scalar result from g then it will enclose that result before > the f/ and disclose it again after the f/. > > The final disclose will in your case see a mix of 0-element and > 1-element vectors and will scalar-entend the 1-element > quasi-scalars to the common shape of all items which is, > in your example empty). > > A different A reveals this: > > * (1⌈A≠0) +.Q B* > * 6 6 * > * 6 6 * > * 6 6 * > > Best Regards, > Jürgen > > > > On 1/26/22 5:25 AM, Elias Mårtenson wrote: > > Consider the following code: > > > > > * A←3 4⍴1 3 2 0 2 1 0 1 4 0 0 2 B←4 2⍴4 1 0 3 0 2 2 0 Q←{⍺/⍵} > (A≠0) +.Q B* > > My reading (and implementation) of the ISO spec suggests the output should > be the following: > > ┏━━━┓ > ┃4 6┃ > ┃6 4┃ > ┃6 1┃ > ┗━━━┛ > > However, in GNU APL I get this: > > ┏→━━━━━━┓ > ↓┏⊖┓ ┏⊖┓┃ > ┃┃0┃ ┃0┃┃ > ┃┗━┛ ┗━┛┃ > ┃┏⊖┓ ┏⊖┓┃ > ┃┃0┃ ┃0┃┃ > ┃┗━┛ ┗━┛┃ > ┃┏⊖┓ ┏⊖┓┃ > ┃┃0┃ ┃0┃┃ > ┃┗━┛ ┗━┛┃ > ┗∊━━━━━━┛ > > Which one is correct? > > Regards, > Elias > > >