The problems you're seeing in BQN appear in J as well as soon as you
start making inhomogeneous boxed arrays (compare J {:: to BQN ⊑). You
seem to think building these out of boxes makes some philosophical
difference. I disagree. Boxes are used to implement array nesting.

> Exactly.  Wouldn't it make so much more sense to project that marker at need
> by arguing it to a function or operator than forcing it onto the data
> itself?

No. The marker can be derived as part of the previous operation (*&.>),
so making it part of the next one duplicates information.

> Suppose x is an array of rank 1, and y is any object.  What is the f such
> that x f y has rank 1 and length one greater than x; its leading elements
> are those of x, and the final element is y (and the obvious extension to
> higher-rank x)? Aside from ∾, you need not only an f, but also a flipped
> version, as well as a function which takes two objects and produces a rank-1
> array whose sole two elements are those objects.

These functions are ∾⟜<, <⊸∾, and ⋈ in order.

Marshall

On Wed, Jun 15, 2022 at 08:53:20PM -0700, Elijah Stone wrote:
> On Wed, 15 Jun 2022, Marshall Lochbaum wrote:
> 
> > I do agree that using nesting for homogeneous shapes is inelegant. What
> > they're doing in this case is like putting a marker in the shape, which
> > could be written 2 3|3 4 in the boxed array A *&.> < B. It's weird that
> > the way to do this is to switch over to an inhomogeneous representation.
> > But it works.
> 
> Exactly.  Wouldn't it make so much more sense to project that marker at need
> by arguing it to a function or operator than forcing it onto the data
> itself?
> 
> 
> > Maybe I've misunderstood, but your comments about nesting give me the
> > impression you think BQN's further from J than it is. Most BQN
> > primitives work on items ("major cells") and don't care whether the
> > argument is nested.
> 
> I expected no less.  While it has not seemed worthwhile to study bqn, I
> generally think of it as being about as close to j as dyalog apl sans a
> couple of the most obvious mistakes would be.  Do I miss the mark?
> 
> 
> > So dyadic , translates to ∾ and I believe the only difference is that
> > BQN doesn't try to extend an argument with rank more than 1 smaller than
> > the other
> 
> Suppose x is an array of rank 1, and y is any object.  What is the f such
> that x f y has rank 1 and length one greater than x; its leading elements
> are those of x, and the final element is y (and the obvious extension to
> higher-rank x)? Aside from ∾, you need not only an f, but also a flipped
> version, as well as a function which takes two objects and produces a rank-1
> array whose sole two elements are those objects.  (I guess this last is the
> stranding metanotation; as it is metanotation, it too cannot compose, and so
> contortions like {𝕨‿𝕩} are necessary.)
> 
> 
> > Similarly, J's { and BQN's ⊏ are identical when the left argument is an
> > array of numbers. BQN doesn't even have a version of APL's Split, and
> > uses < with rank like J.
> 
> Oh--I skimmed the documentation, and saw ⊑ before I saw ⊏.  Regardless, I do
> not think the result can be consistent.  Trying both:
> 
>    ≢0⊑(2‿3)‿4
> ⟨ 2 ⟩
>    ≢0⊏(2‿3)‿4
> ⟨⟩
> 
> I do not know what is more bizarre: for an array to be automatically demoted
> because it did not have the right rank (as apl does with reductions), or for
> the shape of the result of an indexing operation not to be predictable from
> the value of the index and the shape of the array being indexed.
> 
> 
> > It seems Bracha's concern about a "shadow world" is that it's lacking
> > capabilities relative to the "real thing"? I don't think this ends up
> > being the case with nested arrays because they're still arrays, so that
> > functions like Rotate or Grade can be the same. BQN has all the array
> > manipulation of APL and nearly all of K with a fairly small amount of
> > duplication: pair functions ≍ versus ⋈, mapping ˘ versus ¨, folds ´
> > versus ˝, and I guess you could argue reshape ⥊ versus splitting with ⊔
> > (and transpose ⍉ is missing its analogue, K's flip).
> 
> Six isn't enough?  (Actually, j has three: L: S: L.; I don't think they were
> worthwhile.)
> 
> Anyway, transpose is important, because it is one of the few really
> multidimensional operations.  Take it to its logical conclusion.  What if I
> have a matrix of vectors--that is a three-'axis' structure--and I would like
> to exchange the first 'axis' with the third?
> 
> ---
> 
> I would add--I would expect many of these arguments have been had many times
> over before either of us was born :)
> 
>  -E
> 
> > On Wed, Jun 15, 2022 at 04:49:50PM -0700, Elijah Stone wrote:
> > > On Wed, 15 Jun 2022, Marshall Lochbaum wrote:
> > > 
> > > > my opposition to J's flat array model (I think it's almost always worse
> > > > than BQN's based model) is different from my stance on flat arrays BQN
> > > > can also represent and optimize these, although there's no name for the
> > > > category; they'd be called arrays of numbers or arrays of characters
> > > 
> > > I was speaking only of semantics, not implementation details.
> > > 
> > > 
> > > > And of course there can be huge advantages to working with them, but I
> > > > think it's madness to use this as grounds to dismiss a solution that's
> > > > much shorter and easier to read
> > > 
> > > I was not dismissing your solution, nor saying that the present one was
> > > better.  I was saying that I find the use of nested structures inelegant 
> > > (as
> > > well as unnecessary in this case, since the data are completely
> > > rectangular), and that the deficiency in j is only a lack of a primitive 
> > > for
> > > managing these multi-dimensional data effectively.  It is a general 
> > > problem:
> > > it is difficult to manipulate high-dimensional data.
> > > 
> > > Regarding nests:
> > > 
> > > 1. They provide inconsistent results: what relationship has the shape of 
> > > x{y
> > > to the shapes of x and y?  How can dyad , possibly behave consistently?
> > > 
> > > 2. They are a shadow world (cf
> > > https://gbracha.blogspot.com/2014/09/a-domain-of-shadows.html) of
> > > organisation.  Monads 'split' and 'mix' in apl illustrate this; it is not
> > > possible to compose contiguous organisation (adding dimensions to an 
> > > array)
> > > with noncontiguous organisation (adding nested structure to an array).  K 
> > > is
> > > consistent because it only has nested organisation; bqn has both.  J
> > > explicitly places nested organisation in a box, segregated from the rest 
> > > of
> > > the languages, which composes and is coherent.
> > > 
> > > 
> > > > more in keeping with other array principles: that blind reshape ($,) on
> > > > the transposed array is something I try hard to avoid.
> > > 
> > > Yes; see again the baker paper.
> > > 
> > >  -E
> > > ----------------------------------------------------------------------
> > > 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to