« first day (2568 days earlier)      last day (304 days later) » 

00:40
@RubenVerg Seemed like a reasonable time to add Kap primitive tables, hope that helps!
 
1 hour later…
02:06
any operator to do matrix^{n}, not m*2
not. m*n
+.X
 
3 hours later…
05:11
@1234 You can use +.×⍣n
 
2 hours later…
06:53
@1234 Btw, are you aware of APLcart?
 
1 hour later…
08:11
@Marshall thanks!
 
2 hours later…
09:48
@Adám I added "core" and "core dyalog", though I probably labeled as "core" things that aren't actually core, but I guess I'll notice when I add other dialects
oh, also I completely changed the way the list is implemented which meant I had to rewrite every single glyph, and in the move i might have got something wrong
(I also separated monads and dyads)
any help on filling in the ???'s?
@RubenVerg Looks good. In the quest to preserve horizontal space, maybe abbreviate the types to (Fm) (Fd) (Om) (Od) (A) (S) and/or colour codes — or something similar? Compare with abrudz.github.io/voc
I'd also merge the name and description fields, e.g. "Direction: (Complex) signum"
And there's no need for an "external link" icon for the link. Just make the descriptive text the link.
@Adám some entries (Variant) have more than one link
I think it makes more sense to leave them all in beacuse variant in Dyalog vs variant in NARS2000 are somewhat different, even if grouped in the same cell
@Adám oh, that's pretty! also thanks for making me notice I'm missing & and # and ##
10:05
@RubenVerg But the link icons are identical. Would be more useful if it said (wiki, Dyalog, NARS2000) with each word being a link.
10:29
@Adám better?
@Adám tried that, think I like them more separate
10:40
nars2000 has a lot of things that exist in the wiki but not in the available executable and i don't know if I should include them or not
like χ for dfn axis
Sure:
Join: https://mlochbaum.github.io/BQN/doc/join.html#join "merge array of arrays into single array"
Demote: Combine two leading axes
Sane Index: Functional form of bracket indexing
Interval Index: Determine fitting interval, left argument giving beginning points
Key with Vocabulary: Return indices/data* corresponding to locations of elements of the vocabulary
Format With Specification†: … of column widths, decimal places, and optionally scientific notation
Count In: For each element in left argument, count occurrences in right argument
@RubenVerg Yes.
@RubenVerg That's really up to you. But did you try the Gama version?
@RubenVerg You'll need that for GNU APL anyway.
@RubenVerg The category legends could have check boxes (default: all checked) to filter too.
Btw, you really sholdn't use * for multiplication in your descriptions!
@Adám oh yea right, I'm doing this on a machine wihtout unicode input so I put * thinking I'd fix it later and then I didn't fix it :)
@RubenVerg A similar problem is primitives described in various other texts, but never implemented anywhere. Btw, are you planning on including historical APLs, like Sharp APL and A+?
Examples include for Withe and Δ̈ for Domain. The latter isn't even in Unicode.
10:55
i'm afraid those will restrict the definition of "core apl" even further, requiring more duplication
what's your opinion on this?
Maybe a little, but in general, core APL is indeed core, and they will share it.
@RubenVerg Depends on the purpose of your project. What is it?
@Adám what do you thin looks better, using combining characters or CSS overstrike emulation?
Question is first if you should include them at all. But if yes, then definitely CSS. Combining chars don't work at all.
@Adám great question I don't have an answer to. it was meant to be a list of glyphs + what dialects have them, where historical would make sense, but now it's become just a list of primitives across dialects where maybe it doesn't matter that much what historical apls do
but on the other hand there's some interesting bits of history in historic apls
like, it's probably interesting to see when/where something first appeared
How about ⊕ and ⊗, which were never part of any formal publication?
11:01
another thing I don't know how to deal with, and is probably somewhat important, is what to do when a primitive is called two names by different dialects, especially for like Under/Dual which as far as i can tell are both common names for the same thing
@Adám intention was to include them
what can circle-times functions be called?
"polar" and "unit polar"?
@Adám thanks! I'll add these
the split between key data and key indices is monadic/dyadic call, right?
11:31
@Adám I copied those from the wiki, so maybe the wiki is also wrong?
@RubenVerg Yes.
@RubenVerg Yes, it appears so. The idea is simple enough. The type of chars is ' ' so essentially we have ' '< meaning visible, ' '≥ invisible, ' '≤ printable etc.
alright, I'll change it (the readme on the repo is also wrong, btw)
is there a full list of what GNU APL implements? the documentation only lists "non-standard" features, but I don't know what their standard is
oh, I'm also missing mask & mesh from NARS2000. not sure how to describe those
oh no, A+ doesn't have ! for factorial/binomial and uses it for something else. looks like Core APL is being restricted even further
11:48
@RubenVerg That'd be "core" plus that!
if only I knew what's actually core and what I called core just because all the dialects I have now have the feature
for example, Enclose probably isn't core but I call it core. does gnu apl have enclose?
@RubenVerg You could decide that it is APL\360 and simply go by its docs.
@RubenVerg You could possibly introduce negative pills "but not A+" or simply decided that whatever your baseline core is, e.g. APL\360, anything that conflicts isn't "APL" and so isn't in scope of Omnibar.
if I do that, there's plenty of things that aren't core that I assume GNU APL has, like the aforementioned Enclose
surely the gnu apl docs must mention somewhere what their standard is?
They claim they follow the ISO standard.
@Adám neither option is great
a+ has some interesting stuff (Cast) I'd be sad to exclude
I kinda want to split ⍳-scalar and ⍳-vector (maybe even splitting ⍳-nested and ⍳-flat) but I don't know how to write descriptions that are different enough
same problem for other primitives, like ⍸-boolean and ⍸-natural
also I think currently Partition and Partitioned Enclose have the same description, any ideas how to describe them in different ways?
@Adám thanks, I'll check that out
@Adám wow, apl\360 has way fewer things than I imagined
core's really small apparently
12:03
@RubenVerg "Integers until" "All indices of array of given dimensions"
@RubenVerg "Indices of 1s" "Replicate indices"
what? I have to pay 230€ to read the iso standard? is it not available anywhere for free?
@Adám thanks, you've been helping me out a lot (: how about /-boolean vs /-natural?
also I'd give them not just different descriptions but also different names
@RubenVerg Not that I know of :-( however, it is essentially APL2, except that the slashes are hybrids in the standard but always operators in APL2.
@RubenVerg I mean, they are the same, just different specifications. Shouldn't you split those into Boolean and Natural too?
though for the names I guess "Where" and "Where (Natural)" or something is fine, I already do "Key (Values)" and "Key (Indices)" which I don't like but couldn't come up with anything better
@Adám oh yea
neither is Core though
@RubenVerg Those at least have real names: Compress vs Replicate.
oh, replicate isn't core either
12:07
Nope.
@Adám ah, right
i think it gets kinda confusing when you have multiple things for the same function and one is a superset of the other
like, should And list Dyalog as a dialect or should Dyalog only appear in LCM?
@RubenVerg Yup. Did you know that Mix and First are both extensions of the Disclose primitive?
@RubenVerg I guess only in LCM, since And is core.
okay bad example
replicate/compress isn't core, should dyalog be listed in both?
@Adám yeah, I also know dialects can't agree on which glyph is what :)
@RubenVerg Compress is core.
is where (boolean) core?
12:16
No, not at all. Only recently (16.0) added to Dyalog.
x/⍳⍴x used to be a phrase APLers could recite in their sleep.
and is there a dialect with where (boolean) but not where (natural)?
That's what Dyalog had originally when it was added. Don't tell me you want to include version numbers, though!
Note that isn't just {(,⍵)/⍳⍴⍵} since it rejects negative numbers.
@Adám no, ML is already too much to deal with :)
Haha, just you wait until you add APL+ where the equivalent of ⎕ML changes parsing!
okay pretend there's a dialect that only has Where (Boolean). should Dyalog be listed in the where boolean entry (since its Where fits the description) or only in the where natural entry?
12:21
Both.
E.g. in APL+'s equivalent of ⎕ML←0 there's a difference between / and (/).
And their meaning of a b c[x] changes too.
wha— why?
should've sticked (stuck?) to making a simple glyph list :)
APL2 isn't fully backwards compatible with APL\360. In the latter, 10 20 30[2] gives 20 while the former gives a RANK ERROR and requires (10 20 30)[2]. APL+ (old mode) and Dyalog both follow APL\360.
now I understand why nobody (as far as I can tell) has done this before
APL is complex :)
Heh, (how) will you deal with differences in binding strengths in general? In APL2, f⍣2 Y is (f⍣2)Y whereas in Dyalog it is f⍣(2 A)
(Never mind that APL2 doesn't have )
I think actual grammar rules are out of scope
12:26
@RubenVerg Except APLX, which is real ;-)
I'm starting to think colors for the different parts of speech aren't that helpful, maybe I'll add a short version of the name ("M"/"D"/"A"/"C"/"H"/"S") after the meaning name
oh wait you already suggested that didn't you
C? H?
Adverb, Conjunction, Hyperator?
yeah
"MO" is too long
That'd be a mixture of terminology. APLers tend to use "monadic/dyadic operator". Anyway, for operators, you also need to specify "deriving monadic/dyadic function".
I'll make them hoverable, just in case it isn't clear
12:32
E.g. Key (Indices) is a monadic operator deriving a monadic function, while Key (data?) is a monadic operator deriving a dyadic function.
@RubenVerg What about arrays/constants like ? (non-core, btw)
yeah idk feels like a bit too much detail
@Adám Internally I use "R" to indicate arrays but I guess that's not a good name for the actual interface
you can usually tell if the derived verb is a monad or a dyad by the description saying "the argument" or "the left/right argument"
Aside: has become "undefined" — smells JS.
@RubenVerg If so, you don't even need to specify function valence, do you?
@Adám I think I know what went wrong, I'll fix it asap
@Adám and that's why I didn't
though there's many things without descriptions, I guess in that case it's helpful to list it explicitly
You could use outline shapes to indicate type. Similarly to how I do in the game Runemaster:
Functions have round upper corners, with sharp corners on the bottom of sides where they take arguments. Operators have sharp upper corners where they take operands.
Arrays would of course be rounded on all corners. That leaves only hyperator(— no s, so far) and syntax to need special indication. The latter could just be no outline, and the former maybe a double outline.
@Adám cool idea, that could also distinguish array-operands and function-operands if I use different shapes
though I think you overestimate my css skills :)
@Adám should be fixed now
12:45
{border-radius:1em  1em  0em  1em}
{border-radius:1em  1em  0em  0em}
{border-radius:0em .5em .5em .5em}
{border-radius:0em  0em .5em .5em}
@RubenVerg Oh right, f⍣k and f⍣g are conceptually completely different operators.
I'll think about it
maybe the borders could be of the color of the part it takes
so an array operand is red, a dyad operand is orange and a monad operand is yellow
I would have expected something like APL\360 for "core APL", probably safe to bump that up to APL.SV. Current version has a lot of newer stuff, like for After/Bind was introduced by NARS and I think it's still not in GNU APL.
yeah currently Core is "things that are in dyalog, dzaima and nars2000", the intention is to change it to \360
are there primitive differences between \360 and SV?
@Marshall Good call.
@RubenVerg Yes, per the wiki, Format and Execute functions, and the Scan operator.
SV has more. 360 was continuously adding things though, so SV is more like a new version of it than a new dialect, but IBM stopped adding so many primitives around that time.
12:56
@Adám what version of dyadic format does SV use?
maybe monadic format should be Core but the dyad shouldn't be
There was a big 3-ish way split in the early 80s, between SHARP, APL2, and NARS. NARS was only an experiment but Dyalog took a lot of features from it, partly because APL2 hadn't been finalized yet. And Dyalog wasn't popular either, until the 90s. So it's made the NARS family dominant but it wasn't always that way.
@RubenVerg Like Dyalog, so plain monadic format and dyadic by specification, but not by example.
@RubenVerg No, per ^
thinking about the border thing is making me consider a block-based visual (Scratch-like) APL
I think it could be cool
(Snap! has a library that has many apl-like features, but it doesn't have true arrays, only lists of lists)
Filtering by "A and not B" would be particularly useful here, because you can see for example "what new stuff do I get by switching from Dyalog to dzaima/APL?". Maybe even to the point where one include dropdown (current thing) and one exclude is enough to avoid wanting a query syntax.
13:10
Just use APL as query language:-) dyalog>dzaima (or dyalog∧~dzaima)
Which APL? Eh…
@RubenVerg Setting code{font-size:2em;line-height:0.5} makes for a cool effect, imo. Also consider th{vertical-align:middle}
13:51
APL Wiki page for Join (Vision monadic >) is aplwiki.com/wiki/Raze.
I'm in such conflict about the glyph for that. is a really good fit (as an inverse of partition, kinship to A+'s glyph, it is a form of disclosing) but I really feel like for Last too.
Another one would be since it is like a lesser form of Enlist but then I feel like using that for Element Type, as carrying over the old . I really dislike for Type.
14:36
how's this? not totally convinced
(I don't know how to round the blue box, I think it'd look much nicer without the sharp corners)
yeah the more I look at it the less I like it
@RubenVerg Looks very busy.
I really like the idea of marking the type of the operand (array/monad/dyad) but don't know how to do that effectively
One way you could do it is to expand the glyph column to show a call pattern.
So e.g. becomes f⌸Y, Xf⌸Y, A⌸Y, and X(A⌸)Y.
You can use some syntax colouring there too, and/or just emphasise the glyph, with the other symbols being more toned down.
hmm, maybe as a separate column? I'd still like to stay true to its origins of glyph list
Yup, you could do that. You could even use generic symbols rather than repeating the glyph.
14:51
any suggestions for the generic symbols?
f, M, D, A,…
has fMY, XfMY, AMY, and X(AM)Y.
Colouring will make it easier to parse. You could also use casing for effect.
fMy, xfMy, aMy, and x(aM)y.
You could title the column "Call" or "Call pattern".
hmm, this would introduce 27 categories of primitives, not including hyperators
I think it might become quite hard to maintain with all these categories
15:56
@RubenVerg No need to make those the categories. Categories can be F/M/D/H/A/S which matches the single uppercase letter in the pattern.
 
2 hours later…
17:31
@Adám there's some things that conceptually should stay together, though, like the monad and dyad call of ⍨ with an array operand
how would you deal with those?
17:41
oh, also won't work with outer product
 
2 hours later…
19:29
@Adám like this?
19:47
I pushed the pattern thing to production (without the ugly black background), lmk if you spot any pattern that's wrong
functions should be fine (did find & replace), but some of the operators might be wrong
20:07
oh another thing, should Conjugate be core? it's in \360 but not in a few dialects with only reals
20:31
If they implement it as the identity, that is the conjugate function, it's just not very interesting on the available numbers.
hm, guess that's also true

« first day (2568 days earlier)      last day (304 days later) »