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