« first day (1477 days earlier)      last day (1178 days later) » 

12:18 AM
@Adám For aesthetics: It would be nice for Phase 2 problems to have an indication in the sidebar like Phase 1 ones (say a checkmark for "successfully submitted"). Having an empty space with no use is somewhat weird.
 
^ agreed
 
 
10 hours later…
10:48 AM
Bye bye, APL2?
 
11:05 AM
looks like it
 
 
2 hours later…
12:49 PM
@Adám Seems to really be just a change to a new vendor, who will presumably offer roughly the same pace of development as IBM. I requested to merge on the APL Wiki.
 
@Marshall I'm not sure. Let's wait a bit and see.
 
@Adám If we're waiting, the default action would be to not make a page for Log-On APL2 yet, as it makes some pages harder to navigate. APL Wiki is not a crystal ball.
 
@Marshall True. Feel free to merge if you think that's the right thing to do.
 
@Adám Okay, I'm merging.
 
1:12 PM
@Marshall You'll roll back the changes on all the relevant pages, right?
 
@Adám Yes, got stuck a little on the timeline of APL dialects. I'd written the page to include only languages that an APLer could start using immediately, so not things like J or Ivy.
I'm thinking now that APL Wiki probably should make that the definition of a dialect, rather than saying now that it doesn't define the term.
The only sort of borderline case is [[A+]], and we can clarify that it is an APL dialect.
 
@Marshall I added some less APLy entries because I saw ELI there. I agree that we should define the term.
Maybe anything that includes a superset of APL\360 core language, using the same symbols. "Core" excludes system commands and function, I-beams, bracket indexing and output lists.
> APL\360-ish languages only.
Heh, GMTA.
 
@Adám That would rule out A+, and probably Rationalized APL, since they remove last-axis forms.
I think we'd prefer to just say that the syntax, primitives, and glyphs are very similar.
 
1:46 PM
How do I use to group points based on X value?
 
@Razetime X as in left arg?
 
right arg is a list of points
 
@Razetime As a vector of 2-element vectors?
 
yes
might need to be a reduce..?
 
@Razetime ⋄ (⊃¨⊂⍤⊢⌸⊢)(3 5)(2 9)(3 1)(2 6)(2 0)(1 1)
 
1:59 PM
@Adám
┌→────────────────────────────────────────────────┐
│ ┌→────────────┐ ┌→──────────────────┐ ┌→──────┐ │
│ │ ┌→──┐ ┌→──┐ │ │ ┌→──┐ ┌→──┐ ┌→──┐ │ │ ┌→──┐ │ │
│ │ │3 5│ │3 1│ │ │ │2 9│ │2 6│ │2 0│ │ │ │1 1│ │ │
│ │ └~──┘ └~──┘ │ │ └~──┘ └~──┘ └~──┘ │ │ └~──┘ │ │
│ └∊────────────┘ └∊──────────────────┘ └∊──────┘ │
└∊────────────────────────────────────────────────┘
 
cool
 
2:25 PM
CMQ: Any things you would have loved to have been told when you first started with APL, but not listed at abrudz.github.io/tips?
 
the existence of the APL orchard
 
@Adám testcase problem on problems.tryapl.org:
 
> problems
:-)
 
@Razetime link?
 
2:50 PM
Is it just me or are this years phase 2 problems way harder than previous years on average? There are basically no 'trivial' ones (subjective ofc)
 
      '"."'⎕R''⊢'this "is" a test'
this "is" a test
what am I doing wrong here
 
Missing + or *?
 
ah yes
 
 
2 hours later…
4:44 PM
@Razetime Fixed. Thanks! It now allows any ordering, since the problem spec doesn't strictly say.
 
great
 
hi
 
@Adám sorry for not being in there for a while, can we continue today where we left?
decided to f*ck school anyway so
 
lol
 
@Konrad'Unrooted'Klawikowski Sure.
 
if the offer of that personalized approach to APL is still avaible of course
Missed you man <3
 
4:59 PM
I just have to look up where we were up to.
 
I think it was making my own functions or somewhere around that
 
do you know about this? dyalogaplcompetition.com/?goto=welcome @Konrad'Unrooted'Klawikowski
 
@rak1507 It hasn't been formally launched yet. We're still polishing some rough edges.
 
@Adám true, even so he might like to give some of the problems a go
 
@rak1507 I can give it a shot or take a look
we all know that @KamilaSzewczyk will try
 
5:02 PM
@Konrad'Unrooted'Klawikowski might be a bit tough for now but something to bear in mind
 
@Konrad'Unrooted'Klawikowski Yes, indeed. If I'm not mistaken, the last thing you did was to define {2 = +/ {⍵=⌊⍵}(⍵÷⍳⍵)} for determining if the argument is a prime.
@Konrad'Unrooted'Klawikowski Did we touch indexing into an array?
 
nope
@Adám yes, I think we left there
 
OK, so the point is that as opposed to what many languages do, APL allows an array inside the square brackets: ⋄ 'APPLE'[1 3 4]
 
@Adám
┌→──┐
│APL│
└───┘
 
⋄ 'SHE BELIEVED'[2 3 7 8 9 12]
 
5:10 PM
@Konrad 'Unrooted' Klawikowski
┌→─────┐
│HELIED│
└──────┘
 
(Greek Rho) is "reshape", so we can reshape a vector (list) into a matrix: ⋄ 2 3⍴⍳6
 
@Adám
┌→────┐
↓1 2 3│
│4 5 6│
└~────┘
 
Now note that ⍴'APPLE'[2 3⍴⍳4] gives 2 3
The shape of the result of indexing into a vector is the same as the shape of the indices.
 
@Adám so this example makes 3 colums and 2 rows of the output of iota 6? something like that?
 
5:12 PM
Yes, it creates a 2D array.
This is ^^ a very important rule, that, if forgotten, can lead to some questions later.
 
how many dimensions can arrays in APL have?
 
Dyalog APL supports up to 15 dimensions.
If you need more than that, you may be doing something questionable.
 
lol
 
just outta curiosity, how does a 15D array look like?
 
⋄ (15⍴1)⍴1
 
5:14 PM
@Adám
┌┌┌┌┌┌┌┌┌┌┌┌┌┌→┐
↓↓↓↓↓↓↓↓↓↓↓↓↓↓1│
└└└└└└└└└└└└└└~┘
 
It is quite rare to need more than 4 dimensions, though.
 
so it's strongly connected to matrix stuff?
 
Yes, it is. A matrix is just a 2-dimensional array.
 
so every matrix adds additional dimension?
 
APLer's call the number of dimensions "rank", as in "tensor-rank".
So we'll speak of a list as a rank-1 array, a matrix as a rank-2 array.
 
5:16 PM
rank-1 is a vector right?
 
A single number or character is a rank-0 array, a.k.a. a scalar.
@Konrad'Unrooted'Klawikowski Yes, that's right.
Some people call rank-3 arrays cuboids, but at that point mentioning the rank is probably a good idea.
 
Remember IsDivisibleBy ?
 
I think we defined it as IsDivisibleBy←{0=⍵|⍺}
So now we can do ⋄ nums←(⍳5) ⋄ IsDivisibleBy←{0=⍵|⍺} ⋄ nums IsDivisibleBy 2
 
5:20 PM
@Adám
┌→────────┐
│0 1 0 1 0│
└~────────┘
 
But what if we don't want to use Booleans to point at those numbers, but rather we want to extract them?
 
⋄ nums←(⍳5) ⋄ IsDivisibleBy←{⍵|⍺} ⋄ nums IsDivisibleBy 2
 
@Konrad 'Unrooted' Klawikowski
┌→────────┐
│1 0 1 0 1│
└~────────┘
 
That's the division remainder. You want to check that the remainder is 0.
 
5:22 PM
I thought it would tell how much is 5/2 4/2 etc
 
It tells you how much is left over when doing an integer division.
 
Here's a new function (on Shift+I for "Indices where") which takes a Boolean array and returns the indices where there are 1s: ⋄ ⍸0 1 0 1 0
 
@Adám
┌→──┐
│2 4│
└~──┘
 
With that in mind, can you define ThatAreDivisibleBy? It should take a vector on the left and a scalar (single number) on the right, and return those numbers from the left that are divisible by the single number.
 
5:26 PM
 @Adám
┌→──┐
│2 4│
└~──┘
@Adám
┌→────────┐
│0 1 0 1 0│
└~────────┘
@Konrad 'Unrooted' Klawikowski
┌→────────┐
│1 0 1 0 1│
└~────────┘
 
@DyalogAPL Stop! What are you doing‽
 
⋄ nums←(⍳5) ⋄ IsDivisibleBy←{0=⍵|⍺} ⋄ ThatAreDivisibleBy ← {⍸(nums IsDivisibleBy 2)} ⋄ ThatAreDivisibleBy
 
@Konrad'Unrooted'Klawikowski {⍸(nums·IsDivisibleBy·2)}
 
yeah, as I thought
 
This would return the indices of the numbers that are divisible by 2. We want the actual numebrs.
 
5:29 PM
here comes that rho thing right?
 
No, you just need to use these indices to index into the original list.
Also, remember to use and for left and right arguments.
Remember you can play around on tryapl.org
 
yeah, doing that
btw, is RIDE in nixpkgs repo?
 
I don't think so.
 
is there a repo for it on Github or somewhere? I can give it a try to add it to nixpkgs
 
5:36 PM
gonna play with it at the weekend or maybe even tommorow and try adding it to nixpkgs
is that okay with you?
 
Of course. Free world :-)
 
well...
 
@rak1507 ?
 
is RIDE free software?
 
Yes, FOSS. MIT.
 
5:40 PM
Oh right
 
@Konrad'Unrooted'Klawikowski How is it going?
 
{ stdenv, pkgs, wrapGAppsHook }:

let
electron_t = pkgs.electron_8;
in
stdenv.mkDerivation rec {
src = ./.;
version = "1.0";
pname = "ride";
name = "${pname}-${version}";
buildInputs = with pkgs; [
electron_t makeWrapper wrapGAppsHook
];
good
 
I meant with the ThatAreDivisibleBy function.
 
⋄ (⍳5) {⍵÷⍺} 2
 
@Konrad 'Unrooted' Klawikowski
┌→───────────────────────┐
│2 1 0.6666666667 0.5 0.4│
└~───────────────────────┘
 
6:05 PM
yeah I have no idea
tho I think about nixpkg solution
wait
 
@Konrad'Unrooted'Klawikowski OK, let me know another time when you want to continue. My kids need dinner anyway…
 
greet your kids and tell them that they have awesome father
 
Done. :-)
 
'hi kids, I'm awesome!' lol
 
6:27 PM
i've been working on the promised APL dialect
i posted a few binaries on the esolangs server, but i got some stuff to work already
it has lambdas ("dfns"), I/O, basic monads/dyads, guards:
f:α+α×β
a={~$⎕α+β}[24;24]
g:α>0:β⋄α
b=g[0;9]
c=g[3;9]
R=a+b+c
i decided to blend together a few paradigms, and so i took a few K features, a few APL features, and a few Forth features to make this thing
it's still very young and i started working on this particular implementation yesterday afternoon, and there were a few bugs that i fixed
i brainlessly used unordered_map for the symbol table, which resulted in the evaluation order being undefined, so that for example a=2 and b=a would sometimes error, and sometimes yield a=b=2
this particular example should print 0 and return 216
 
what is β?
 
second argument
 
fair enough
what is $ and ⎕
 
$ - alternative - output device
 
cool
the link you posted seems to not work
 
6:33 PM
the APL evaluation order stays
i'm going to implement some sort of a looping construct, but i'm not sure what do i want to decide on
 
as long as it's not :For i :In thing
 
i'd probably either borrow the power operator, or support just recursion, or allow explicit loops over dfn's with a condition
but because everything is immutable, explicit loops make no sense
 
oh immutable cool
I think ⍣ makes sense
 
i've been oscillating around supporting it
i know that recursion works for sure, and it can be used as a looping construct because we already have guards
 
if you do implement ⍣ can you think about calling the condition first
so like
function⍣{thing that returns false} value doesn't run
 
6:36 PM
yep, my language has quoting
 
I think that would be good but other people might have other opinions
 
function won't be evaluated unless it needs to be
 
@rak1507 No, more like "Hey Kinderlach, einer was heist Konrad Klawikowski hat mir gesagt, as ich soll enk sagen, as enk haben an awesome father!"
 
yea I was more meaning a way of doing conditions using ⍣ because at the moment if you have f⍣g⊢x it runs f even if g x is false at first
@Adám Is that german?
 
@KamilaSzewczyk So how was it again, only lists of lists, or proper multi-dimensional arrays?
 
6:38 PM
currently, it has only scalars... :p
but lists are going to be added soon-ish
 
@rak1507 Kind-of. Yiddish.
 
Aha
Was wondering why google translate didn't work
 
@KamilaSzewczyk Only, right? No matrices?
 
nope
@rak1507 lambda+guard kind of solves this
parameters which aren't shadowed, aren't overwritten
 
true, but even so, I think the power operator should check g x first
idk
 
6:42 PM
so that for example this code returns 20:
f:α+α×β
g:f[2]
R=g[4;4]
 
no brackets required for your lambdas?
 
there's no lambda involved here.
i'm speaking of shadowing now
 
what's f:α+α×β
 
replace beta with omega
and : with ←
and add braces around it
 
@KamilaSzewczyk Not that it matters much here, but now, according to official APL Wiki terminology, it wouldn't be called an "APL dialect" but rather a separate language. RAD calls itself an "APL derivative". Do you have a name for your language yet?
 
6:43 PM
oh right so like the 'whole thing' runs inside braces?
 
yes
check the more sophisticated example above
 
or is f:α+α×β equal to f←{⍺+⍺×⍵}
 
got it
 
@Adám It's not official, it's just APL Wiki convention. No one outside APL Wiki has to follow its guidelines.
 
6:44 PM
@KamilaSzewczyk Are the braces optional then, or what?
 
braces define a lambda
f:α+α×β <=> f={α+α×β}
i use the first one, because it's shorter
 
@Marshall Of course, though it is "official APL Wiki terminology", no?
 
@Adám I don't think I'd call anything on APL Wiki "official". There's no officiator.
 
I see. I was more thinking of official as meaning explicitly declared by itself.
 
are square brackets going to be the only way of calling a function?
 
6:48 PM
no
i plan on adding more stuff, but i need to work my way up gradually :p
 
cool
 
@Adám I don't think it's important whether it matches any definition of "official". It's just kind of misleading because it sounds like some People In Charge have decreed that's how things work, but it's just some stuff I wrote.
 
have you thought about supporting more than two arguments? f[x;y;z]?
@KamilaSzewczyk (btw, I'm not trying to say 'add all this stuff', just interested in what your plans/ideas are)
 
currently 4 arguments are supported
but i'll extend it to infinity later
 
first 4 greek letters?
 
6:50 PM
@Marshall Right. Sorry @KamilaSzewczyk, I didn't mean to be harsh about your use of the word "dialect".
 
first... infinity ... greek letters?
 
@Marshall RAD and Kamila's language are actually interesting cases in maybe looking even more like traditional APL than A+, but not supporting arbitrary rank. "APL dialects"?
 
first 4 greek letters for referring first 4 arguments
then i'd use a separate letter for argument vector
 
What would we call something that say worked exactly like Dyalog APL or APL2, but if you tried to do anything that would result in an array of rank≥2, it'd error?
@KamilaSzewczyk Heh, problem with ε vs ?
 
@KamilaSzewczyk Okay, I'm still confused about how this example works. What does it mean to call f[2] if f takes two arguments? Evidently g's arguments get passed to f, but what if you have a definition like g:f[2]+f[3]?
 
6:52 PM
epsilon isn't in the first 4
 
@rak1507 No, it is a reason to stop at 4. It is in the first 5.
 
@Adám oh right yeah, I see what you were saying, I thought you were saying there might be an issue with that
 
@KamilaSzewczyk Huh, I like that strategy.
 
@Marshall the 2nd argument is taken from the parent
and the 1st argument is shadowed by the call
@Adám i'm not sure if i'll have all APL operators :p
 
@Adám I hadn't looked into RAD at all, and had assumed it was more different from APL. Are there examples of RAD code out there? The question is whether typical expressions would be intelligible to a "generic" APL progammer.
 
6:57 PM
@KamilaSzewczyk is f[a;b] the same as a f b or b f a?
 
@KamilaSzewczyk In that case f would get arguments f[2,4] and return 10, right? Did I misunderstand?
 
@Adám a f b
@Marshall i typoed, it should be 10 :/
 
@KamilaSzewczyk Isn't that a bit odd that f[b] is f b but a f b is f[a;b]? I.e. the right argument is not always the first (and only) argument.
 
@KamilaSzewczyk Not sure I like it, but that makes sense at least.
Seems a little precarious in that if you add an argument to a function but forget to change one of it's callers, it can be passed an argument you didn't expect.
 
@Marshall Yes
 
7:06 PM
I don't think I've heard of RAD before, what is it?
 
 
@Adám this APL thing doesn't apply here
there's no right side and no left side in function application
this comparison is pointless
 
Ah cool
 
@Marshall i think it's nice
i wanted to put some practical use to APL, because i really want to make a bytebeat/graphics/music-oriented languge
 
7:09 PM
@KamilaSzewczyk Oh, I'd be interested in that. I've done some live (in the sense of live feedback, not actually listenable live) electronic stuff in J and it works all right but there are clearly some deficiencies.
 
<Kiscica> The alternative breaks math - you want 2 - 1 to be 1.
 
@Marshall Started translating some of it to BQN but missing fast float to int conversion functions and FFT means it's slow.
@KamilaSzewczyk Did you know SuperCollider has a little J influence?
 
@Adám i want to have, for example, a way to assume that a single argument is every argument of a call
i may also create some sort of train-like construction
at the moment i don't have everything clearly specified and i'm adding stuff as i need it :p
 
:-)
 
@Adám chatexchange has given be duplicate messages once too once
 
7:19 PM
@user1543385 Hi Lukas Hermann. If you want to participate here, email access@apl.chat
 
 
3 hours later…
10:22 PM
@dzaima I added some specialized code for specific lengths in my filtering code, and I'm surprised to find that it's hardly any faster under OpenJDK, and actually slower with the Graal native build. Any insight into this? Is arithmetic really that slow?
Some test code:
g‿f ← •Import¨ "oscillator.bqn"‿"filter.bqn"
•←≢500 f.Lp2 g.Saw 1e6⥊200
 
10:35 PM
the old filter file appears to create 4M Num instances, whereas the new one creates 10M
so that's 2.5x more GCing
also the spam of VARO/VARMs (yeah, my compiler still uses those for non-local variables..) probably takes most of the time anyway
 
@dzaima Oh, the numbers are all references. Yeah, that's tough. Switching to LOCs at least would be useful though.
 
yeah, there's not really any way around that in java
@dzaima (reason being that blocks are compiled the moment its "token" is created, so the outer block just doesn't exist at all yet)
@dzaima (of course generating special code for scalar number arguments in scalar functions would be fun and all, but eh)
 
10:57 PM
@dzaima The point of compiling blocks early is so that you know the type, right? I never got why you would do it that way. Can't you just keep a stack of block information (opening brace location, which special variables or ; or : have been seen) and annotate the closing brace (also link the opening brace to it) when you find it?
 
@Marshall I did it that way because that's the first thing that came to mind, and it had no minuses at the time. Of course I could switch to something different now, but it'd probably take >5 minutes so i haven't done it yet as there hasn't really been any reason to me to
 
@dzaima Fair enough. Some day I'll spend >5 minutes myself and actually support headers...
 
11:17 PM
@dzaima actually like just moving this line to Somewhere Else™ would really be enough.. well i'll do that Tomorrow™
 

« first day (1477 days earlier)      last day (1178 days later) »