WEBVTT
00:00:00.400 --> 00:00:04.959
Welcome to Tacit Talk, episode, I believe, 35.
00:00:05.280 --> 00:00:10.560
And I am extremely excited to have back a guest that it's been, I believe, over a year.
00:00:10.720 --> 00:00:13.439
I think it was February of 2025.
00:00:13.679 --> 00:00:15.119
I'm not going to recall the episode.
00:00:15.199 --> 00:00:18.239
It was probably like episode 15 or something, that plus or minus.
00:00:18.320 --> 00:00:25.280
But we're having back Madeline Vrigani, creator of many things, probably, I'm actually not sure what most folks know you for.
00:00:25.440 --> 00:00:34.320
It's probably Tiny Apple, but also uh creator of the Omnibar, a fantastic tool for comparing glyphs across all the different APLs.
00:00:34.560 --> 00:00:39.520
More recently, creator of, I'm not sure if I'm gonna pronounce this correctly, AP8L.
00:00:39.600 --> 00:00:41.920
I'm not sure if it has a Q is that correct?
00:00:42.079 --> 00:00:42.240
Yeah.
00:00:42.399 --> 00:00:42.880
That's correct.
00:00:43.039 --> 00:00:50.000
All right, because I know that what is it, Kubernetes has some like K8s, but they pronounce it weird when they're doing their conferences.
00:00:50.159 --> 00:00:59.600
Anyway, so uh, and potentially creator of other things that I don't even know about, but primarily we're we're having you back on to talk about the editions that have been released since the last time we had you on.
00:00:59.679 --> 00:01:09.680
I believe it was on either dot, I think it was dot 10 last time, and so you've released officially dot 11 and dot 12, but we are on dot 13 beta of tiny Apple.
00:01:09.840 --> 00:01:11.599
We also might chat about some other things.
00:01:11.760 --> 00:01:15.359
You just released a blog post, I think it was today.
00:01:15.519 --> 00:01:16.959
Was it today or in the last couple days?
00:01:17.200 --> 00:01:18.159
Yeah, this morning, yeah.
00:01:18.319 --> 00:01:19.120
Just this morning.
00:01:19.359 --> 00:01:31.359
And uh was mentioning inverses, and I was I was before this even started, I was thinking I got some questions, but I'll just wait until we're chatting on Tacitalk so that folks in the future can uh get the I guess what is it?
00:01:31.519 --> 00:01:35.200
The the knowledge that I will accrue by asking you, they will also have access to.
00:01:35.280 --> 00:01:36.799
So, anyways, thanks for coming back on.
00:01:36.879 --> 00:01:37.359
How's it been?
00:01:37.439 --> 00:01:43.519
And yeah, well, I guess we can start with uh a tiny apple, but yeah, what's what's what's new and and and how's it been?
00:01:44.079 --> 00:01:47.280
A while there's been you know some breaks between adding new things.
00:01:47.359 --> 00:01:48.000
I'm back right now.
00:01:48.159 --> 00:01:52.079
You can see I'm sharing the history thing that I added, but yeah, for sure the main thing is inverted.
00:01:52.239 --> 00:01:53.359
Let me see if I can.
00:01:54.879 --> 00:01:55.760
It's a lot of stuff.
00:01:55.920 --> 00:01:56.079
Okay.
00:01:56.400 --> 00:01:59.120
So it's very much inspired by Wewa.
00:01:59.519 --> 00:02:04.319
So there is a ton of different like ways a function can be inverted based on how you use it.
00:02:04.480 --> 00:02:10.159
You know, in like dialogue, usually there's just like mm-hmm you do like power minus one to get the inverse of a function.
00:02:10.400 --> 00:02:18.400
And it's like you can invert it like majorly or you can invert it dyadically, and by like the left argument gets binded automatically.
00:02:18.560 --> 00:02:22.639
So wewa calls the first one an uninverse, so it just has the same name here.
00:02:22.879 --> 00:02:28.560
And then the second one, uh I guess it's a bit different because the arguments are like ordered differently because there's a stack and whatever.
00:02:28.800 --> 00:02:32.639
Uh I doesn't want me to say there's a stack, but uh kind of it's a stack.
00:02:32.719 --> 00:02:42.400
So yeah, the the binding thing is called anti, which is uh inspired by the Wiwa and Wewa has a third type of inverse, which dialogue doesn't really have, I don't think.
00:02:42.479 --> 00:02:49.840
Maybe it's there for just like a few specific printers, which is the one where you invert it dyadically but you bind the other way.
00:02:50.000 --> 00:02:53.439
And we are called this contrast, I just took the uh the name from there.
00:02:53.599 --> 00:02:59.520
Uh and the other three are well the names are new, but the actual behavior not not really, I guess.
00:02:59.759 --> 00:03:02.159
So I remember the order once I could.
00:03:02.400 --> 00:03:06.080
And it's just is but well, just you know, to interrupt you in the middle of your explanation.
00:03:06.240 --> 00:03:11.439
So all of this is baked into the inverse modifier that we're looking at right now.
00:03:11.520 --> 00:03:12.080
Is that correct?
00:03:12.319 --> 00:03:12.560
Yes.
00:03:12.719 --> 00:03:15.919
It depends on how you call the derived function, yes.
00:03:16.080 --> 00:03:20.479
So this first one is just the monantical, so you do f inverse y, you get the uninverse.
00:03:20.960 --> 00:03:22.879
Then if you pass the left argument, you get anti.
00:03:23.439 --> 00:03:29.199
And then if you commute the function before inverting it, you get like a commuted version of the contrary inverse.
00:03:29.280 --> 00:03:32.319
So if you commute it again, you get the the contra inverse.
00:03:32.560 --> 00:03:37.840
The this inverse is like splitting a thing in half, so you know, like in we wa, I think I didn't share it.
00:03:38.000 --> 00:03:46.639
If you have minus three and then you do unmultiply it, uh it splits into like the sign and uh the absolute value.
00:03:46.879 --> 00:03:54.479
I don't think it has a name in we wa, so I call it a this inverse, which is like uh splitting apart into two things, and you get it with reduction.
00:03:54.639 --> 00:04:07.280
So if you invert a reduction, you get a pair, just like because of course if you get have a pair or like a two cell list and you reduce it, you can apply a diary function to the two halves without like splitting apart or something like that.
00:04:07.520 --> 00:04:14.240
So yes, it's the inverse of that, and then there is the inverse which is like splitting a thing into two of the same parts.
00:04:14.560 --> 00:04:26.879
I actually don't remember which functions have this, but maybe it's like halves that if you have like if you do like the the by inverse of addition, you get the half or something and remember.
00:04:27.120 --> 00:04:32.160
Uh and then the last inverse is like the the prime factorization in wea.
00:04:32.879 --> 00:04:39.360
If you in we will if you undo reduction, you get this a list of the prime factor of the prime factors of a number.
00:04:39.920 --> 00:04:46.639
And because I already had used reduction for the other thing, of course, I can disambiguate by anything other than the arity.
00:04:46.879 --> 00:04:57.519
So if you call the inverse of a reduction diadically, instead of getting the pair, it's treated like the inverse of a fold, so it does the the wewa thing.
00:04:57.680 --> 00:05:01.199
So if, for example, for the prime factory, you would pass the left argument of one.
00:05:01.680 --> 00:05:07.199
If you gave it something else, you would divide the number first, but it's kind of like a side effect of how it's implemented.
00:05:07.600 --> 00:05:08.800
And I think that's everything.
00:05:08.879 --> 00:05:14.879
There's also like the contextual under, but it just uses the inverses on the way forward and on the way back.
00:05:15.120 --> 00:05:18.000
And this is definitely the biggest thing, I think.
00:05:18.399 --> 00:05:23.439
Um bit hard to remember like what I already used and what I didn't, because it's been like a year or something.
00:05:23.759 --> 00:05:24.879
It all blends together.
00:05:25.120 --> 00:05:28.480
Yeah, this is definitely the most important bit for sure.
00:05:28.800 --> 00:05:39.279
So it I mean, uh probably not, but I know Weewa has a page that lists a lot of the I don't know what you call them, idioms, like the uninverse idioms.
00:05:39.360 --> 00:05:41.439
Do you does Tiny Apple have any of this stuff?
00:05:41.600 --> 00:05:43.600
Because it is very curious.
00:05:43.920 --> 00:05:49.920
I didn't realize that it kind of is in so basically like a lot this stuff is kind of implicit in Weewa.
00:05:50.319 --> 00:05:58.240
If you have the unmodifier, you can apply that to, I guess, some function, some expression, and you're kind of splitting that.
00:05:58.319 --> 00:06:07.040
So in the case where you're using un on a reduction, you're calling that I can't remember if it was was it the anna, or was that the by inverse?
00:06:07.600 --> 00:06:09.839
Bye is the inverse of the selfie.
00:06:10.160 --> 00:06:10.879
Of the selfie.
00:06:11.120 --> 00:06:12.079
Monadic selfie.
00:06:12.399 --> 00:06:14.000
And so dis inverse and inverse.
00:06:17.199 --> 00:06:17.360
Right.
00:06:17.439 --> 00:06:24.720
So yeah, it's it's dis and anna are on reductions, and the question is whether you call it monadically or dyadically.
00:06:25.279 --> 00:06:28.639
And yeah, so this stuff is very curious.
00:06:28.879 --> 00:06:40.720
And I guess you're baking this all into a single primitive, but I know that we wa has un, it has anti, and so I guess Yeah, it's just because of the fixed arity, basically.
00:06:41.199 --> 00:06:43.040
It's because of the fixed airity.
00:06:43.279 --> 00:06:43.920
Oh, I see.
00:06:44.079 --> 00:06:55.199
So all of what Weewa provides via un and anti, you've baked into the inverse primitive in Tiny Apple because Tiny Apple has ambivalence.
00:06:55.680 --> 00:06:56.000
Yes.
00:06:56.720 --> 00:06:57.680
Interesting.
00:06:58.240 --> 00:06:58.720
Interesting.
00:06:58.879 --> 00:07:01.439
I'm gonna have to play around with this and and see.
00:07:01.759 --> 00:07:08.639
So does Tiny Apple I I assume it's borrowed some of the Wiwa idioms like the prime factors and stuff?
00:07:08.720 --> 00:07:09.600
Or yeah.
00:07:09.759 --> 00:07:13.600
I don't have a lot of them, but mm most of the ones they have come from there, yeah.
00:07:14.079 --> 00:07:14.639
Come from Weewa.
00:07:19.759 --> 00:07:21.120
Can I get the prime factors yet?
00:07:21.920 --> 00:07:23.120
Oh no, it doesn't work.
00:07:23.199 --> 00:07:25.920
Uh I'm gonna try the other one called a rebox.
00:07:26.959 --> 00:07:28.079
I've heard of it.
00:07:30.800 --> 00:07:31.279
I forgot.
00:07:31.519 --> 00:07:32.959
It's uh control up.
00:07:33.680 --> 00:07:33.920
Okay.
00:07:34.160 --> 00:07:34.480
Yeah.
00:07:34.879 --> 00:07:38.879
Uh one multiply reduce inverse 24.
00:07:39.439 --> 00:07:40.000
There we go.
00:07:40.399 --> 00:07:41.920
So yeah, I also have this one for me.
00:07:42.319 --> 00:07:49.040
And so if the only one that feels a little bit like hacky is this one, the um the this inverse, because like I want both of them, right?
00:07:49.120 --> 00:07:59.120
If I do just one without the one before, I get the sign and magnitude, and I want both, but I can't really do anything to distinguish them other than type the sorry the IRT as we call them.
00:07:59.360 --> 00:08:07.360
So one of them has to take two arguments, and I can't really think of a way to get this one to take two arguments, but the prime factorization it just divides the number first.
00:08:07.439 --> 00:08:17.360
So if I write two, it's got one less two, if I write three, it's got one less three, it's not great, but uh, the alternative was having two primitives, which you know uh not things like that.
00:08:17.439 --> 00:08:17.759
Yeah.
00:08:18.160 --> 00:08:18.399
Right.
00:08:18.560 --> 00:08:23.279
Oh, so you prefer to keep it just all basically in the single inverse primitive, is what you're saying.
00:08:23.519 --> 00:08:23.839
Yeah.
00:08:24.079 --> 00:08:24.240
Yeah.
00:08:24.399 --> 00:08:44.240
I started thinking, I mean, this is kind of like a tangential thought, but I was just thinking about this yesterday when I was working on the last touches to the YouTube video I put out, and it was actually from the comment that you left on that YouTube video where you mentioned that the name of the was it mixed glyph was like um split glyph.
00:08:44.559 --> 00:09:14.480
It it had picked up the key value pairs, and I actually intentionally left that in and forgot to make a comment about it in the video because it it made me realize that it we don't actually, or at least I haven't seen any papers or heard conversations of people talking about it, but in C, or I guess in a bunch of languages, there is a type of polymorphism called ad hoc polymorphism, but it's typically referred to as function overloading.
00:09:14.639 --> 00:09:23.919
And you can function overload on the number of arguments, on the type of the arguments, and really like this is a it's a key feature of APLs.
00:09:24.080 --> 00:09:36.799
Like the the overloading, like what we call ambivalence is just ad hoc polymorphism in other languages like C, in that we've assigned two different meanings to the airity of the function.
00:09:36.960 --> 00:09:41.039
And then on top of that, and I I you can correct me because you probably know more about this stuff.
00:09:41.120 --> 00:09:54.480
You've studied these languages more than I have, that I think K has this, and now maybe Tiny Apple with dictionaries, is that when you're overloading on type, that's like another form of ad hoc polymorphism.
00:09:54.559 --> 00:10:14.000
So there's kind of like there's type ad hoc polymorphism, and then there's airity ad hoc polymorphism, where whenever you're overloading a glyph to have a different behavior, and so uh correct me if I'm wrong, is that what the key value pairs is when when you use the drop glyph on a dictionary, it has this custom behavior, correct?
00:10:14.159 --> 00:10:15.120
Yeah, yeah.
00:10:15.519 --> 00:10:21.279
The idea with all of the preemptives that take dictionaries that they have to be like pretty similar to the ones for arrays.
00:10:21.679 --> 00:10:29.679
So in some cases they just get grouped into the same documentation thing, but in some things they feel like it's just close enough, but there's enough for a difference that they want to split them.
00:10:29.759 --> 00:10:34.320
And yeah, there's not really a great way in like uh metadata to specify what the type is.
00:10:34.559 --> 00:10:38.080
There's a lot of different ways you can overload things in APL.
00:10:38.320 --> 00:10:45.360
I'm trying to think of a good example, but you know, like in BQN you can add the numbers and characters and arguably that's already an overload by type.
00:10:45.600 --> 00:10:48.559
There's also we will have overloads by rank, for example.
00:10:48.639 --> 00:10:51.919
Well uh uh dialogue has overloads by rank, let's see.
00:10:52.240 --> 00:11:00.960
If I do like IOTA 5, I get a normal list, but if I do iota 2, 3, I get a box array, that's overloading by rank essentially.
00:11:01.200 --> 00:11:04.879
You know, kind of because it's yeah, so that's that's rank polymorphism, yeah.
00:11:05.200 --> 00:11:05.440
Yeah.
00:11:06.559 --> 00:11:13.120
Rank polyformi is usually is about like being independent of rank, like you can add any arrays or things like that.
00:11:13.279 --> 00:11:17.200
This is actually like changing behavior based on the rank, which is slightly different.
00:11:17.360 --> 00:11:19.200
Um has his own wear.
00:11:19.519 --> 00:11:19.919
That's true.
00:11:20.240 --> 00:11:25.360
If I do well, so that actually that actually means that there's kind of two different types of rank polymorphism.
00:11:25.440 --> 00:11:33.600
Like the the and now the what is it, the sibling of ad hoc polymorphism is parametric polymorphism, which is like you know, one primitive same behavior.
00:11:33.759 --> 00:11:40.320
So kind of like you you have rank you have parametric rank polymorphism, and then you also have ad hoc rank polymorphism.
00:11:40.399 --> 00:11:45.200
So that the iota was an example of ad hoc rank polymorphism.
00:11:45.360 --> 00:11:57.440
But in anyways, it's it's made me think that there's actually like a bajillion types of polymorphism inside these array languages, but we only refer to them as like rank polymorphic, but really it's it's rank polymorphic and ad hoc polymorphic.
00:11:57.519 --> 00:12:01.600
And within ad hoc polymorphic, there's like there's type, there's airity.
00:12:02.080 --> 00:12:06.240
There's a lot of types of polymorphism in these array languages, and no one's talking about it.
00:12:06.320 --> 00:12:07.360
What's going on here?
00:12:08.480 --> 00:12:11.919
Yeah, I guess it's uh it feels more like a consequence, I guess.
00:12:12.080 --> 00:12:13.759
Sounds really like a key feature.
00:12:13.919 --> 00:12:17.039
But then on the other hand, you can't really do it for your own functions.
00:12:17.120 --> 00:12:20.000
You have to like you know do manual guards and whatever.
00:12:20.159 --> 00:12:28.799
You can't like really say, Oh, I want to do this based on the rank, and this is the other rank, you just have to write a define and say if the rank is due to this, and why is this the other?
00:12:29.039 --> 00:12:34.080
I can't take I can't define f on rank one, f on rank two as different things.
00:12:34.480 --> 00:12:37.279
Yeah, that is I mean, what is that?
00:12:37.440 --> 00:12:50.159
I guess it's unfortunate that the language primitives have all that rich functionality, but you can't get it as I mean technically some languages, I think including does tiny apple have obverse or an equivalent of it?
00:12:50.559 --> 00:12:51.279
No, not yet.
00:12:51.519 --> 00:12:52.159
Okay, not yet.
00:12:52.240 --> 00:12:55.440
But J has it and I think WeWa has it, right?
00:12:55.679 --> 00:12:57.600
Yeah, the one for setting inverses.
00:12:57.840 --> 00:12:58.399
Yeah, yeah.
00:12:58.559 --> 00:12:58.960
Yeah, yeah.
00:12:59.600 --> 00:13:06.240
And I guess does that mean if Tiny Apple adds obverse, you have to add a very complicated obverse that enables you to uh to define it?
00:13:06.720 --> 00:13:08.799
Yeah, is that the right argument is a dictionary.
00:13:09.039 --> 00:13:10.480
Uh right operand, sorry.
00:13:10.720 --> 00:13:24.720
So you say, well, you can just say the normal inverse and you test buffs function, that's fine, but if you want to say all of the inverses, you you give it to that dictionary, so essentially each inverse gets a different number uh or a graph, I'm not really sure.
00:13:24.879 --> 00:13:34.960
And you just do key by plus based, and that's like uh you could do if I have my function f and I want to set the inverse, I can do let me pick a random grip like that.
00:13:35.039 --> 00:13:35.360
I don't know.
00:13:35.440 --> 00:13:42.000
Let's say this is obverse, and I do like a dictionary, and I say the normal inverse is or maybe like that.
00:13:42.080 --> 00:13:54.240
The normal inverse is I don't know, plus, and then the the contra inverse is gonna be minus and then reduce and the annual and this together are going to be times, whatever.
00:13:54.320 --> 00:13:55.360
So like something like this.
00:13:55.440 --> 00:13:55.519
Right.
00:13:55.759 --> 00:14:00.240
And of course, each one of these means two things because you can still overload by RT.
00:14:00.399 --> 00:14:04.559
If you want to do different things within the arc, you can use valences, which is like this.
00:14:04.799 --> 00:14:06.639
So you can say yeah.
00:14:06.879 --> 00:14:11.120
So like the complete uh way to say all sticks would be something like that.
00:14:11.919 --> 00:14:12.399
Very neat.
00:14:12.559 --> 00:14:15.279
So this is uh hypothetical, it doesn't exist at the moment, but yeah.
00:14:17.759 --> 00:14:31.600
If I can't come no, the list is random, but if I can't come up in anything about it like this, it's kind of a bit like maybe unwieldy, I guess, but there's a lot of things that you can set, and it's not not really an easy way for you to be able to specify them.
00:14:32.159 --> 00:14:34.080
Alright, so we have a number of questions in the chat.
00:14:34.159 --> 00:14:43.679
I think the most recent one is how can you distinguish between a single primitive with various modes and a single glyph being shared by multiple primitives?
00:14:45.360 --> 00:14:47.200
I think it's just subjective, I guess.
00:14:47.759 --> 00:14:51.519
There's some things that are obviously very far away, so it just feels like an overload.
00:14:51.840 --> 00:14:57.279
Some things are feel really close, so just different modes, but you know, the boundary is definitely arbitrary.
00:14:57.600 --> 00:14:59.759
So like is just an overload or not?
00:15:00.320 --> 00:15:04.639
I I wouldn't say it is, but you know, you could definitely argue that it's an overload.
00:15:05.360 --> 00:15:05.919
Right.
00:15:06.720 --> 00:15:16.960
I mean do you have a so yeah, a single primitive with various modes versus a single glyph being shared by multiple actually I don't understand the the latter part.
00:15:17.120 --> 00:15:21.360
A single glyph being shared by multiple quote unquote primitives.
00:15:21.759 --> 00:15:24.240
Like single glyph multiple functions, I think.
00:15:24.639 --> 00:15:27.919
And does that mean yeah, you're overloading on you're overloading on something?
00:15:29.440 --> 00:15:29.919
Yeah.
00:15:30.240 --> 00:15:32.799
Yeah, I guess this is kind of the and that's what I've been thinking.
00:15:32.879 --> 00:15:37.679
I I mean I have to add K to array box so that I can play around with it more.
00:15:37.840 --> 00:15:48.879
But that was the realization when we were talking to Jacob about fixed APL that it actually has a lot more in common with K because K does a lot of overloading on types.
00:15:49.200 --> 00:15:53.840
And it also makes me think too, and I maybe this is a question that you can you can answer, maybe maybe you don't know.
00:15:54.080 --> 00:16:05.200
Does like in in building that comparison mode where you're showing the table of translations and then you have like the nested, like how does it, what's the expression on nested?
00:16:07.120 --> 00:16:08.000
What does K have?
00:16:08.080 --> 00:16:12.559
Like K because K doesn't even fully have like a fully ranked arrays, right?
00:16:12.639 --> 00:16:17.600
Like they've got their do they call them dictionaries or do they call them tables?
00:16:18.159 --> 00:16:20.320
I think well it depends on the dialect.
00:16:20.399 --> 00:16:22.720
I think there's a lot of different K's with different things.
00:16:22.799 --> 00:16:24.960
Some of them I think don't have dictionaries at all.
00:16:25.039 --> 00:16:30.879
And I'm pretty sure tables and dictionaries are slightly different, but I'm not really the right person to ask about KMS.
00:16:31.200 --> 00:16:33.679
Gotta bring on John Ernest so he can answer in the future.
00:16:33.840 --> 00:16:38.240
But the the point being is that K and Q don't really have like the same model.
00:16:38.399 --> 00:16:42.799
And also Weewa even like I don't actually fully understand what Weewa has.
00:16:42.879 --> 00:16:46.000
Does Weewa have the concept of nested arrays?
00:16:46.240 --> 00:16:52.960
Because a lot of the times when I'm typing things, it'll just automatically put it like in matrix form if it recognizes that the shapes align.
00:16:53.200 --> 00:16:54.639
Oh, we always the same as J.
00:16:54.960 --> 00:16:56.559
Weewa's the same as J.
00:16:56.799 --> 00:16:57.120
Yeah.
00:16:57.279 --> 00:17:01.679
The main difference is that if you have like a box, you can do arithmetic on it.
00:17:02.559 --> 00:17:07.759
If I do if I have a box one, two, three, like this, I can do three plus.
00:17:09.599 --> 00:17:12.000
You can do a bit and this works, and in J it doesn't.
00:17:12.319 --> 00:17:13.440
Uh I'm just gonna do it here.
00:17:14.480 --> 00:17:18.480
If I do three plus box three, that's not gonna work.
00:17:18.799 --> 00:17:21.200
Uh but the actual model is the same mostly.
00:17:22.000 --> 00:17:24.640
Yeah, it doesn't really big difference other than that.
00:17:24.960 --> 00:17:26.559
But yeah, it's definitely got rank.
00:17:26.880 --> 00:17:33.039
Maybe it's you mean that like the the brackets like this already uh automatically mixed up like this.
00:17:33.599 --> 00:17:34.319
Yeah, exactly.
00:17:34.400 --> 00:17:46.880
Like a lot of times when I expect to see like the equivalent of like a nested array and j or dialogue APL or even tiny apple, it formats it like this, and then I you have to switch to the braces.
00:17:47.119 --> 00:17:53.359
And I am not a I'm not a WeWind expert enough to know like what's the what's the difference here?
00:17:53.519 --> 00:18:00.079
And well it's kind of like a ray notation dialogue, and you can't do it in tiny apple because uh I know it by the bra.
00:18:00.400 --> 00:18:01.440
Actually I can do it here now.
00:18:01.920 --> 00:18:10.319
So if I do two one, two, three like this, it's nested, and like this it's a matrix.
00:18:10.480 --> 00:18:13.119
It's the same thing except instead of the parents you use bases.
00:18:13.440 --> 00:18:16.640
Uh of course the model is like the different, so it's not the exact same thing.
00:18:16.720 --> 00:18:39.279
Like I can do this, one, two, and I get two boxes, but because the dialogue is nested, if I do just one and then two, I just get normal what oh oh sorry, like if I do this, it just gets matches one, two, it's the same array, of course, because it's uh it's nested, so this one doesn't get boxed or like if it did, it wouldn't change anything.
00:18:39.440 --> 00:18:43.440
Uh of course in Wii Wide that's different because you can box the scalars.
00:18:43.759 --> 00:18:51.680
Yeah, we I mean I still need we need to have another full episode on a ray cast on the different flat boxed, you know, whatever the different models are.
00:18:51.759 --> 00:19:03.759
We've talked about it multiple times, and I always get like 75% to a full understanding, and then like two episodes later, I've forgotten my understanding of the different models because it's it's very subtle the differences.
00:19:03.920 --> 00:19:08.319
Like for the most part, you know, pervasive or scalar primitives, they all work the same.
00:19:08.559 --> 00:19:13.039
And in like the 90% of cases, all the models are roughly working the same way.
00:19:13.119 --> 00:19:17.759
It's only when you get to the corner cases of, yeah, like boxing scalars or when you do some kind of reduction.
00:19:17.839 --> 00:19:20.400
And that was that was kind of when we were talking to Jacob as well.
00:19:20.480 --> 00:19:26.880
You know, he had the different types of folds or whatever of whether it's gonna unbox and and his choices, anyways.
00:19:26.960 --> 00:19:28.960
We've got a we've got a lot of comments in the chat too.
00:19:29.119 --> 00:19:36.000
Adam saying uh in K-land a table and dictionary are transposes or flips of each other, and that makes sense.
00:19:36.079 --> 00:19:42.000
We gotta, like I said, I gotta add I gotta add, I think the choice is gonna be NGNK is the one that's gonna get added.
00:19:42.160 --> 00:19:44.160
And we also we missed at the very beginning.
00:19:44.240 --> 00:19:48.240
Um Adam asked, Does it handle all compositions of primitives too?
00:19:48.400 --> 00:19:50.720
And I think that was a question about the inverse.
00:19:51.039 --> 00:19:58.000
Yeah, yes, it does the yeah, it does uh company inverse, but it doesn't do force yet.
00:19:58.160 --> 00:20:13.200
But you can use I don't know, like what's a function that could inverse, maybe I don't know, square root and then uh square root and then maybe I can't think of any function that has an inverse.
00:20:13.440 --> 00:20:16.160
So it's doing a negation, which is the self-inverse, of course.
00:20:16.480 --> 00:20:20.240
And if I do this on minus two, I get two.
00:20:20.640 --> 00:20:24.240
And if I invert s and two, I'm gonna get minus four.
00:20:24.319 --> 00:20:34.079
Yeah, so uh inverting compositions works, but you can't undo forks because that's I don't think you can like forks at velocity, I guess you can't really do that cleanly.
00:20:34.559 --> 00:20:41.759
And there's also like non-numerical solutions, like I think dialogue has some like numerical solver in case it can't invert it to the function itself.
00:20:42.000 --> 00:20:48.400
But I don't have that like if I can try to invert any thing in define just doesn't work.
00:20:48.799 --> 00:20:49.119
Right.
00:20:49.279 --> 00:20:50.720
Okay, that makes sense.
00:20:51.039 --> 00:20:52.960
All right, so that is I mean, that's inverses.
00:20:53.039 --> 00:20:53.839
Are there is there more to say?
00:20:54.000 --> 00:21:06.079
I gotta like I said, I have to play around and uh I I I find the idea of inverses very attractive because I mean, as you know, I I like the non I don't know.
00:21:06.160 --> 00:21:09.039
I I honestly I'm of two minds of which model I prefer.
00:21:09.200 --> 00:21:23.680
Uh I love probably and and this I I forgot that uh we were supposed to start off the top saying I th you know I I flip I flop over what's my favorite array language, but I think Tiny Apple is my favorite array language, at least of the day of the last few weeks.
00:21:23.920 --> 00:21:37.839
And it's and at one point I thought maybe it was WeWa, but mostly the thing that I love about WeWa is how great the like tooling, you know, it kind of feels like if you're going from APL to Weewa, it feels like you're going from C to Rust.
00:21:38.000 --> 00:21:41.359
Like it has like you know, you write Weewa test, Weewa run.
00:21:41.519 --> 00:21:46.079
It's got, you know, in its Weewa pad, you can do asserts and and run like unit tests.
00:21:46.240 --> 00:21:47.359
It's got a lot of nice stuff.
00:21:47.440 --> 00:21:50.960
It's got like the the formatting and the alignment of uh comments and whatnot.
00:21:51.119 --> 00:21:53.119
So that is really what I love about WiWA.
00:21:53.279 --> 00:21:59.759
It's not some and it also does have a lot of really nice like the design and the thoughtfulness that Kai has put into some of the prints.
00:22:00.720 --> 00:22:08.960
Like when I found out that one of the overloads of tuples was the equivalent of prefixes in J, I thought that was just really, really nice.
00:22:09.119 --> 00:22:20.000
And uh and and I've again and again I come across, you know, I think Kai and Wewa was the first to have the stencil minus for basically your two wise reductions.
00:22:20.240 --> 00:22:23.119
And I know that Tiny Apple, I'm not sure if you want to show that.
00:22:23.440 --> 00:22:23.920
Yeah, sure.
00:22:24.079 --> 00:22:27.119
That because I think that's new since the last time we talked.
00:22:27.279 --> 00:22:30.319
You baked that into the stencil operator.
00:22:30.480 --> 00:22:42.559
So you you have both n-wise reductions, but then you also have specifically for the you know the two wise case, and this is something that I've always wanted in all of the array languages.
00:22:42.640 --> 00:22:57.359
It breaks my heart in BQN that I I I guess I heard Adam said the other day that Marshall made a choice that structural things are functions, and so things like windows and prefixes he puts into functions that that do the modifications.
00:22:57.519 --> 00:22:58.400
I never realized that.
00:22:58.480 --> 00:23:02.240
You know, Adam made it as like a throwaway comment, and I've been thinking about it ever since.
00:23:02.400 --> 00:23:03.279
Anyways, oh yeah.
00:23:17.599 --> 00:23:18.079
Yeah, yeah.
00:23:18.160 --> 00:23:22.960
A lot of thought, and he's been very principled about the way that he designed BQN.
00:23:23.119 --> 00:23:25.519
And so, anyways, yes, this is fantastic.
00:23:25.680 --> 00:23:28.559
But so the things that I love about Weewa are more its tooling.
00:23:28.720 --> 00:23:35.119
And when we were talking to Jacob, he mentioned that he really liked the infix nature of APLs.
00:23:35.200 --> 00:23:36.880
And I realized that like that is so true.
00:23:37.039 --> 00:23:44.319
Like, probably my least favorite thing about Weewa is the prefix notation for binary operations.
00:23:44.480 --> 00:23:54.799
I really, and and maybe it is just because I started with APL, and so you grow to like what you first know, whereas someone else that starts with WeWa might prefer that and then think that APL is weird.
00:23:54.960 --> 00:24:00.960
Whatever the reason, I do tend to prefer the kind of symmetry of of forks and APL.
00:24:01.119 --> 00:24:06.720
And and then Tiny APL, the thing, the the tiny apple, the thing that I really love is it's got all the it's got all the primitives.
00:24:06.799 --> 00:24:16.480
Everything you want, like you know, in the last video I made, the fact that you've got last, the fact that you've got both the you know, the BQN first and the first cell and both equivalents, it's just very nice.
00:24:16.640 --> 00:24:26.480
And you know, you kind of you've joked in the past that like, oh, I'm trying to put everything from all the array languages, but that's actually kind of like it's a feature, you know, like and people say, Oh, how many primitives is too many?
00:24:26.640 --> 00:24:28.400
I don't think it's that, it's too many, you know?
00:24:28.640 --> 00:24:38.319
Anyways, and there's still things about, I mean, we were chatting, I can't remember if it was via Discord or it was on a YouTube comment section, but I uh I think it was in Discord, the Weewa Discord.
00:24:38.480 --> 00:24:46.559
I asked, would you ever consider doing something with the empty syntactic space outside of the fork or the banana brackets, whatever you want to call them?
00:24:46.720 --> 00:24:48.160
And you said, uh maybe.
00:24:48.240 --> 00:24:50.240
I'll think about it or see how hard it is.
00:24:50.319 --> 00:24:54.400
And I I think if I recall, you said that just parsing it is is a bit tricky.
00:24:54.559 --> 00:24:54.799
Yeah.
00:24:54.960 --> 00:24:59.359
But I think because my parser is a little bit like I'm not sure I fully understand how it works.
00:24:59.599 --> 00:25:04.160
Do you want to say I think I had a fever when I was writing and I never touched it later.
00:25:04.240 --> 00:25:05.279
So I'm not sure.
00:25:05.519 --> 00:25:07.680
The parser that you wrote, you're not sure you understand.
00:25:08.240 --> 00:25:14.480
Yeah, I add new things every time, but the old core and not even try touching, I don't think, for a while.
00:25:14.799 --> 00:25:15.200
I see.
00:25:15.359 --> 00:25:36.000
Yeah, because it would be very, I mean, when I was solving that problem, the so the problem was the basically you're given pairs of characters if you haven't seen the YouTube video, and you want to extract the first character from each pair and the last character from each pair, and then do a without to basically remove any of the uh characters that show up in the first.
00:25:36.240 --> 00:25:38.319
Yeah, I guess we can we can write up an example.
00:25:38.720 --> 00:25:41.039
Do you remember a good example already?
00:25:41.839 --> 00:25:46.799
This works because basically it'll remove ABC from B C D, so the answer will be D, hopefully.
00:25:48.240 --> 00:25:50.240
Oh yeah, this is not that I forgot.
00:25:50.400 --> 00:25:51.519
Um like this.
00:25:51.759 --> 00:25:52.880
So yeah, the answer here is D.
00:25:52.960 --> 00:25:57.920
So you if you and if you use pair for a second with to replace without, it'll it'll show.
00:25:58.000 --> 00:26:07.359
So you've got your firsts, your lasts, or I guess technically it's lasts and then firsts, and then you want to get rid of from the lasts the firsts.
00:26:07.440 --> 00:26:12.799
You know, the problem says it has something to do with whatever destinations and whatnot, but the this is the essence of it.
00:26:13.119 --> 00:26:21.279
And I thought that cap would have the shortest solution because if if you do the alternative.
00:26:21.359 --> 00:26:28.960
So the alternative way to solve this problem is to transpose and then do a so yeah, let's let's see if we can do this slide.
00:26:29.039 --> 00:26:36.640
So yeah, if you transpose and then you have to do a uh column-wise reverse.
00:26:37.759 --> 00:26:38.160
Oh yeah.
00:26:38.319 --> 00:26:41.440
So but now in order to make this tacit though, so I think that was correct.
00:26:41.759 --> 00:26:44.240
Oh, I found can I not undo a memory books?
00:26:44.559 --> 00:26:44.960
Not really.
00:26:45.039 --> 00:26:50.079
If you go control shift up, it'll bring you back your last expression, I believe.
00:26:50.960 --> 00:26:53.359
Oh yeah, but it doesn't actually have control Z.
00:26:53.920 --> 00:26:57.039
Yeah, so it's gonna make sense.
00:26:57.279 --> 00:26:58.880
Yeah, I think this works.
00:26:58.960 --> 00:26:59.039
Yeah.
00:26:59.359 --> 00:27:00.240
So yeah, this works.
00:27:00.400 --> 00:27:10.480
And so what I was hoping for, and this is actually, we can talk about this because I don't actually fully understand why certain languages, the without reduction doesn't work.
00:27:10.720 --> 00:27:16.640
And but the the thing I was thinking is that cap has their two-train only and left bound functions.
00:27:16.880 --> 00:27:30.400
And so I thought as long as it's got uh trans it as long as it has the mix, the split, and the transpose, you should be able to do this in cap, but it doesn't have, I believe, the one of them.
00:27:30.640 --> 00:27:34.240
And then it also the I don't think the without reduction works.
00:27:34.400 --> 00:27:36.160
So yeah, let's see how this falls apart.
00:27:36.319 --> 00:27:38.400
So oh yeah, sorry.
00:27:38.960 --> 00:27:45.279
Well, I mean I should be saying sorry, the uh array box should be converting that correctly, but it's uh failing.
00:27:45.839 --> 00:27:47.599
So this is not correct.
00:27:47.759 --> 00:27:53.839
So what I mean Oh sorry, this has to be like this, yeah, and then this doesn't work.
00:27:54.319 --> 00:27:59.279
Oh, it's because it it does each choice and okay, this is gonna be uh actually.
00:27:59.599 --> 00:28:00.720
So why so this is the thing.
00:28:00.799 --> 00:28:06.559
I don't actually uh my understanding is that some of the I mean if if you do do they have reduced first?
00:28:06.799 --> 00:28:20.480
Yeah, some of the reduced first is the reduced the reduce firsts, hard to pronounce, is not doing the like they're not doing without on like a row wise basis.
00:28:20.720 --> 00:28:35.279
So you should be like basically applying a binary operation, which is the without reduction, but for so some of the array languages, when you do a without reduction, it does it on like a element-wise as if it were.
00:28:38.720 --> 00:28:45.039
So if I want to get the same result, I have to write each here and I think that's gonna work.
00:28:48.319 --> 00:28:49.839
And it has to be a reduction.
00:28:50.160 --> 00:28:51.119
So this is the same result.
00:28:51.599 --> 00:29:00.319
So in cap and like dialogue and most nested APLs, the each time you do a reduction, there's an implicit each added to the function that you give it.
00:29:00.799 --> 00:29:05.279
Of course, if you only have flat arrays, it doesn't change anything and like pervasive functions here.
00:29:05.680 --> 00:29:11.359
So like it's a choice that you can make going from like no nesting to having nested arrays.
00:29:11.599 --> 00:29:17.119
Like if in J, for example, you don't need this, but I have no idea how you do it.
00:29:17.920 --> 00:29:23.039
Like this, and then transpose and like this, it's just that.
00:29:23.359 --> 00:29:26.799
You'll have to get rid of the uh semicolons.
00:29:27.200 --> 00:29:28.640
And then I use this.
00:29:29.200 --> 00:29:29.599
Yes.
00:29:29.839 --> 00:29:31.039
So this works.
00:29:31.279 --> 00:29:33.039
This works in J because there is no each.
00:29:33.200 --> 00:29:36.799
If I do like this or something, you're gonna get the same result.
00:29:37.039 --> 00:29:37.359
Yeah.
00:29:37.599 --> 00:29:41.119
So some languages add an each to the function and some don't.
00:29:41.359 --> 00:29:44.240
Usually suck languages don't and nested languages do.
00:29:44.400 --> 00:29:46.559
I don't really like nesting like as a concept.
00:29:46.880 --> 00:29:54.160
Yeah, I mean I put it nested because when I started making it I knew about dialogue essentially, so you know that's what I was used to.
00:29:54.480 --> 00:30:00.400
But I'm not sure I would make the same choice, but in any ways, I don't like the like nesting it as a concept.
00:30:00.480 --> 00:30:02.079
I like to keep things flat yet.
00:30:02.319 --> 00:30:06.400
So I didn't feel like uh adding the implicit each was a good idea.
00:30:06.799 --> 00:30:08.559
The same thing happens with like table.
00:30:10.319 --> 00:30:14.480
I have like I do.
00:30:18.799 --> 00:30:33.759
Yeah, it's a bit hard to read, but if I did this in cap it would be the I'm not sure how it's gonna be the there's like one left level of nasty, I'm not sure that's clear, but yeah, so here there's also an implicit each.
00:30:34.640 --> 00:30:38.720
Like if I wrote the of course if I do that, there's gonna be another each.
00:30:38.880 --> 00:30:40.559
We don't think there's anything in this case.
00:30:40.799 --> 00:30:41.680
Oh no, yeah, it does.
00:30:41.839 --> 00:30:54.400
So I'm not really sure, but so yeah, there's some functions that have an each sometimes, which is implicit, and I removed all of those, so it's like closer to J and WiY and languages like that.
00:30:54.480 --> 00:31:00.319
So if it works there, it's more likely to work in Tiny Apple rather than if it works in Battery PL, I think.
00:31:00.640 --> 00:31:13.759
And so is this because Adam in the chat's saying that's because of how first access reduction is defined along the vectors made from the columns versus the major cells, whereas in the case of a matrix, major cells are the rows.
00:31:14.000 --> 00:31:24.640
And that's typically how I think of like the when I see a uh reduce first, I think of it operating on the rows.
00:31:24.720 --> 00:31:30.319
Like even though when you're adding those, it is essentially the same thing as adding up the columns.
00:31:30.559 --> 00:31:35.519
Really, it's like you're putting pluses in between the rows, but that's not how all arrays work.
00:31:35.599 --> 00:31:39.279
So you're saying J and Wewa don't work that way.
00:31:39.599 --> 00:31:44.720
So the J way, which is also my way, is to just take this cell and this cell.
00:31:44.960 --> 00:31:47.599
Well, mine is left right, but it doesn't really matter in this case.
00:31:47.759 --> 00:31:52.400
So take this one and this one and add them together, and then take this one and add good result.
00:31:52.799 --> 00:31:56.480
Uh the dialogue way is to add these three, it's gonna work.
00:31:56.720 --> 00:31:58.559
These three and you see my curve?
00:31:58.640 --> 00:31:59.039
I'm not sure.
00:31:59.119 --> 00:31:59.519
Yeah, I can't.
00:31:59.680 --> 00:32:03.200
And this three and this three, and then put them in the in a vector.
00:32:03.359 --> 00:32:14.720
So it's the same thing for flat arrays, it's always the same for flat, but if you go into next arrays, it's gonna act different because of the different way that nesting would be the case, I guess.
00:32:15.920 --> 00:32:19.920
Yeah, so like if you put them into a low-rank array, you're gonna lose some nesting something.
00:32:20.079 --> 00:32:22.480
So yeah, the fact is the same as having implicit.
00:32:22.720 --> 00:32:27.279
I explained it like that because if you want the behavior, you add an each in tiny apple.
00:32:27.519 --> 00:32:30.079
But yeah, there's definitely other ways of seeing it for sure.
00:32:30.400 --> 00:32:34.720
Yeah, it's kind of complicated, and I'm not sure either way is better than the other.
00:32:34.799 --> 00:32:37.279
It kind of depends on your goals, I guess.
00:32:37.680 --> 00:32:45.680
And so is this an inherently a flat versus nested versus base thing, or is this just an implementation definition?
00:32:46.640 --> 00:33:13.359
Well, I mean clearly it's not because uh Tynapple is nested and has this, but y I would say it's traditionally it's a split between flat and nested languages, but necessarily not like an idiot difference is just kind of like the the pervasiveness of arithmetic through nesting, which usually works in nested languages and usually it doesn't work in flat languages, but you know, we are as flattened still works, so it's just a design choice, I guess.
00:33:13.680 --> 00:33:14.000
Right.
00:33:14.240 --> 00:33:22.079
Yeah, I was very surprised because I think I was doing it first in Tiny Apple and I did the without reduction, and I was like, ooh, that's very nice.
00:33:22.240 --> 00:33:40.880
I had I don't think I've ever written a without reduction on a two-row array, and then I was so disappointed when I got to CAP because I was like, Cap has the tacit model that I that could lead to the shortest solution, but unfortunately it it didn't have it.
00:33:41.440 --> 00:33:41.839
Yeah.
00:33:42.160 --> 00:33:43.359
What are you trying to do here?
00:33:43.680 --> 00:33:49.920
I'm going to the the the the dictionary version of the my solution and try from memory.
00:33:50.160 --> 00:33:56.079
So there's this function that takes the exact format uh that uh the problem is and turns it into a dictionary.
00:33:56.640 --> 00:34:07.119
Now I have to I guess do the values, subtract the I think that first and it is essentially already a train.
00:34:08.079 --> 00:34:08.320
Yeah.
00:34:08.480 --> 00:34:12.320
So it's the same length, I think, but it's just uh slightly different approach.
00:34:12.400 --> 00:34:23.440
So instead of doing the the each and the first, you just group that into a dictionary first and then you do so last when you give it to dictionary, it gives you the values of the training and first gives you the the keys.
00:34:23.760 --> 00:34:26.400
So it's just another kind of overload, I guess.
00:34:26.800 --> 00:34:32.400
Is it I guess it's not possible to use nothing after the dictionary primitive?
00:34:32.719 --> 00:34:37.280
Because that's uh no, because you want to apply this on the result on this.
00:34:37.519 --> 00:34:38.960
So you can do like this if you want.
00:34:39.280 --> 00:34:48.719
I was I was just about to ask, do you have do you have a you know design philosophy that leads you to choose for the the cap fork versus the banana bracket fork?
00:34:48.960 --> 00:34:50.639
Oh, it's just what takes less parents.
00:34:50.800 --> 00:34:54.239
Um if I can do it without brackets, it's gonna oh sorry.
00:34:54.880 --> 00:35:04.880
If I can do it without brackets, it's gonna be I'm gonna use a cap thing, but if it's like maybe longer or one of the things is a kind of yeah.
00:35:05.199 --> 00:35:11.039
One of the things is a composite function, not just a primitive, then it's gonna be the banana bracket.
00:35:11.440 --> 00:35:13.679
It's mostly just what looks neater, I guess.
00:35:13.920 --> 00:35:14.239
Right.
00:35:14.400 --> 00:35:19.519
I guess so in the case before it kind of looks a little bit nicer because you don't have nested banana.
00:35:19.920 --> 00:35:21.920
Yeah, double train, yeah, it kind of looks mad.
00:35:22.320 --> 00:35:27.119
But then you can remove the other one, of course, and I do with one hand, but you can just put it on top here.
00:35:27.519 --> 00:35:28.400
This also works.
00:35:28.719 --> 00:35:31.679
Yeah, you can't see the same result, but it's the same thing.
00:35:31.920 --> 00:35:32.239
Interesting.
00:35:32.480 --> 00:35:35.519
I usually try to use trains as least as possible, I guess.
00:35:35.760 --> 00:35:45.679
If I can do it with combinators, I'm gonna use combinators, but I mean if if I have, of course, I'm just gonna use trains, but I think they're just a little bit less pretty than combinators.
00:35:46.320 --> 00:35:51.519
You're saying that in general, if you can avoid trains, the code ends up looking nicer.
00:35:51.840 --> 00:35:53.199
Yeah, in my opinion, yeah.
00:35:53.519 --> 00:35:55.920
This is prettier, I think, than the version with an advert.
00:35:56.400 --> 00:35:57.199
Yeah, that's true.
00:35:57.360 --> 00:36:01.360
Although I wonder if I if I syntax highlighted the brackets, if that would change my mind.
00:36:02.639 --> 00:36:03.199
Interesting.
00:36:03.360 --> 00:36:13.280
So there's oh yeah, so we so we did end up talking about flat versus nested and the fact that a without reduction, depending on the language, there's an implicit each.
00:36:13.440 --> 00:36:18.159
And so then I guess for the languages where there is an implicit each, what's the solution?
00:36:18.320 --> 00:36:23.679
You have to switch it to a nested array and then do the without reduction on that nested array?
00:36:24.000 --> 00:36:29.119
Yeah, I think if you split it first, you know, like do may your cells based on what you want to do, you think that's more or less.
00:36:29.519 --> 00:36:31.360
Um I do from here.
00:36:31.679 --> 00:36:38.400
So we have like I want to mix and then I want to transpose and again mix.
00:36:38.800 --> 00:36:39.119
There we go.
00:36:39.440 --> 00:36:41.599
So then I want to split it on the cells again.
00:36:41.760 --> 00:36:45.039
I could do split, but I don't think it's encapsulated as the other thing else.
00:36:45.280 --> 00:36:49.679
So I have to do enclose rank one, yeah.
00:36:51.519 --> 00:36:51.760
Okay.
00:36:52.079 --> 00:36:52.880
I think it works.
00:36:54.159 --> 00:36:55.840
Yeah, because it's a matrix, I guess.
00:36:56.159 --> 00:36:58.960
And then you just do the reduction and it works.
00:36:59.119 --> 00:36:59.360
Yeah.
00:36:59.599 --> 00:36:59.760
Yeah.
00:36:59.920 --> 00:37:03.920
So you have to like go around each by adding a layer of nesting yourself.
00:37:04.320 --> 00:37:16.400
Yeah, and this is this is why honestly, tiny apple a lot of the time, it just I end up so fond of it because having to write like enclose rank one and then parenthesizing it, it just hurts, it hurts the soul, you know?
00:37:16.559 --> 00:37:28.719
That like you're almost doubling the length of your solution, which I I know code golf is not the end goal, but it's like when when you talk to Kai, it's about how the ease of like expressing what you want.
00:37:28.960 --> 00:37:34.320
You're always like he is they're always trying to make that as easy as possible, right?
00:37:34.400 --> 00:38:01.760
Like it's not about like we're we're trying to make uh code golfing the usefulness of this language, but when you end up having to write five characters in order to express a thing that's expressible with a single primitive in another language, like I don't know, that that there's always like it makes me a little bit sad because I'm just trying to express and like I know how to do it in like three or four characters in my head, but if it ends up being twice as many or three times as many, like that it does seem like you know it's a barrier to expressing the algorithm.
00:38:01.920 --> 00:38:12.559
And in Tiny Apple, a lot of the times, like you have the shortest path to expressing yourself because you have access to all all the all the primitives, which is which is really really nice in my opinion.
00:38:12.800 --> 00:38:23.280
I mean sometimes brackets, but uh one of my design principles is like writing code has to be satisfying, and you know, working around things is never satisfying, you know.
00:38:23.360 --> 00:38:28.960
Adding it an each, it's fine, but you know, having to do all of this might work myself, it's a bit less satisfying.
00:38:29.039 --> 00:38:33.119
So if I had to choose between the two options, I'm gonna go with the more satisfying one.
00:38:33.599 --> 00:38:34.000
Yeah.
00:38:34.239 --> 00:38:41.199
Max is saying disclose rank one is more general and compositional than split.
00:38:42.000 --> 00:38:43.760
They are the same thing.
00:38:43.920 --> 00:38:45.760
I I think they mean minus one, maybe.
00:38:46.079 --> 00:38:49.280
Or may or maybe they mean like split the the tiny apple version.
00:38:49.519 --> 00:38:51.840
We were talking about this early in the record, I think.
00:38:51.920 --> 00:38:55.599
So if I have like a 3D array, actually it doesn't work here.
00:38:55.760 --> 00:38:56.559
Let me do it here.
00:38:57.679 --> 00:38:57.840
Okay.
00:38:58.400 --> 00:39:04.800
If I have uh two, three, four, something, then split it's gonna be like this.
00:39:05.039 --> 00:39:10.400
This is the dialogue uh down arrow, and then this is the tiny apple down arrow.
00:39:10.639 --> 00:39:12.000
So they are clearly different.
00:39:12.079 --> 00:39:19.760
I like the second one more because it you know it feels more line axis, which is always nice, but I don't really ever reach for the first one, I don't think.
00:39:19.840 --> 00:39:22.800
But you know, I can imagine you know, some users for it, maybe.
00:39:23.039 --> 00:39:25.840
Of course, for matrix, the matrices is the same thing.
00:39:26.000 --> 00:39:28.639
If I just do two, three, I'm gonna get the same thing.
00:39:28.880 --> 00:39:32.480
Because of course, you know, the rank is two, so two minus one is one again.
00:39:32.719 --> 00:39:34.320
But for everything else, it's different.
00:39:34.400 --> 00:39:37.039
So I guess it depends on your goals, I guess.
00:39:37.360 --> 00:39:41.519
Yeah, Adam in the chat he's he's saying all very good to be able to express yourself.
00:39:41.760 --> 00:39:44.480
He's saying precisely, but maybe he means concisely.
00:39:44.559 --> 00:39:46.800
Or maybe he does mean precisely, he can clarify.
00:39:46.960 --> 00:39:50.239
But the inflated vocabulary has cost for readers, see Chinese.
00:39:50.480 --> 00:39:53.599
I mean, I don't know obviously there's a threshold.
00:39:53.840 --> 00:39:57.280
That being said, like Yeah, you can see that there's all of this.
00:39:57.920 --> 00:40:00.639
Yeah, I'm not gonna deny that, but I don't know though.
00:40:00.719 --> 00:40:09.840
I don't I do not think that there are too many primitives in the wrong, I don't know them all, but that's just because I don't spend, you know, eight hours a day writing Tiny Apple.
00:40:09.920 --> 00:40:22.639
I spend most of my time switching between these languages and then forgetting, as as you did a couple times, that like the split or whatever in in cap is is the disclosed, because it's so confusing when we swap between the different names.
00:40:22.800 --> 00:40:26.159
And I don't know every single primitive in any one of these languages.
00:40:26.320 --> 00:40:29.440
But that being said, I don't think Tiny Apple uh has too many.
00:40:29.599 --> 00:40:34.400
And like uh in fact, uh I don't know what the limit is, but like a hundred, two hundred, that's not the limit.
00:40:34.480 --> 00:40:55.840
The the human brain is capable, especially if you're using these things as like a daily driver, like yeah, I think it's it's more than possible to uh and like the thing is when I when I go to when I go to fixed APL, I mean I know that fixed APL is in its infancy right now, but like there's I think there could be like three times as many glyphs, because there's a ton of things that don't exist there yet, right?
00:40:55.920 --> 00:40:58.000
I think I don't think deduplicate is there.
00:40:58.239 --> 00:41:03.440
I don't even think, if I recall correctly, that there are sort primitives yet, maybe, or I don't know.
00:41:03.519 --> 00:41:06.320
There was not I'm not sure actually.
00:41:06.480 --> 00:41:07.360
There might have been grade.
00:41:07.440 --> 00:41:09.760
I know they have one or the other, but they didn't have both.
00:41:10.000 --> 00:41:12.159
Anyways, I that that uh yeah.
00:41:12.320 --> 00:41:18.000
And that that's the other thing, is uh we uh a while ago I was talking about how Tiny Apple, I'm pretty sure is my favorite.
00:41:18.159 --> 00:41:24.719
But sometimes I I I flip-flop between do I want fixed airity or do I not want fixed airity?
00:41:24.880 --> 00:41:31.119
Because if you have fixed airity, one of the disadvantages is now you you know all things equal need twice as many glyphs.
00:41:31.199 --> 00:41:35.440
Whereas with Tiny Apple, you can overload on the the valence.
00:41:35.599 --> 00:41:41.199
And so is that just a problem though, that we have a lack of like nice fitting together Unicode glyphs?
00:41:41.360 --> 00:42:01.920
And so that I'm gonna end up with like an awkward-looking language because you know, if I want all the whatever 200 primitives and tiny apple in a fixed airity language, I now need 400 primitives, uh, which then leads you to exactly where I mean you mentioned in your blog that inverses, I I did you I can't remember if you called it it was a cheap trick or a hack or something just to like avoid needing new glyphs.
00:42:02.159 --> 00:42:04.719
Oh, I don't remember either, but yeah, it's definitely something like that.
00:42:04.960 --> 00:42:05.519
Something like that.
00:42:05.679 --> 00:42:13.199
And that's I I mean, when I see what Kai's done with Weewa, I really like the the un and the ante and yeah, a cheap way.
00:42:13.360 --> 00:42:14.159
And uh I don't know.
00:42:14.239 --> 00:42:16.000
I like I I haven't made my mind up.
00:42:16.079 --> 00:42:17.280
I I'm curious to get your thoughts.
00:42:17.360 --> 00:42:19.039
You know, you've implemented Tiny Apple.
00:42:19.119 --> 00:42:27.119
It's like, is there a sweet spot for number of glyphs, overloading on inverses, fixed arity versus ambivalence?
00:42:27.199 --> 00:42:35.199
Like, what's your opinion and like if you were to design an I don't know, and like I guess you have tiny apple, but I'm not sure you that would be your ideal language, right?
00:42:35.280 --> 00:42:42.079
It was more of a let's throw everything at the at the whatever the kitchen sink in an array language and and see where we end up.
00:42:42.719 --> 00:42:51.199
Well, you know, again, I'm not the best person to ask how many printers too many because I definitely gonna have as easy to time remembering them than any other user of my language.
00:42:51.519 --> 00:42:54.960
But I think I've not reached the limit yet, for sure.
00:42:55.199 --> 00:43:09.119
I yeah, I can I don't think that being like maximistic like this is the best idea for all types of languages, but you know, the goal is actually to be the kitchen thing to be the playground for experimentation and things like that.
00:43:09.199 --> 00:43:16.559
So the more things you have at your disposal, the easier the new things you can tell if they are useful or not, I guess.
00:43:16.960 --> 00:43:22.320
But yeah, if I were to design more like serious language, I would definitely cut down on the number of images.
00:43:22.719 --> 00:43:23.920
I like Ambivalence.
00:43:24.159 --> 00:43:32.400
I know it's a bit controversial, but you know, there's definitely better pairings and worse pairings, but if they're close enough, I think it's fine.
00:43:32.639 --> 00:43:38.800
It doesn't really hinder the build as much because you know most of the time you can tell what herity something is trying to be.
00:43:38.880 --> 00:43:43.440
You know, maybe it's uh very long range, maybe not, but there's not a lot of those.
00:43:43.519 --> 00:43:49.440
I I do write a lot of those, but uh the average code doesn't, so you can usually tell, I guess.
00:43:49.760 --> 00:43:50.159
Yeah.
00:43:50.320 --> 00:43:59.760
I feel like I would have to go through the exercise of implementing like a fixed APL like language to realize that like there's uh a lack of enough.
00:44:00.159 --> 00:44:12.239
Like if you think of certain primitives like sorting, minimum, maximum, floor, ceiling, all the kind of things like first-last, like all the kind of things where you need to indicate like directional.
00:44:12.400 --> 00:44:16.719
Like we and I know Weewa, they kind of use the arrows with like dashes through them.
00:44:16.880 --> 00:44:22.400
And that that's I'm not do I I I asked it in the YouTube video, but then didn't get any comments so far.
00:44:22.719 --> 00:44:37.039
I don't in particular love any of the first last primitives because I don't really I mean, arguably the tiny Apple ones are the nicest because one of them is like smaller than the other one.
00:44:37.119 --> 00:44:48.480
There's still symmetry, but the underbar you can kind of think of as you know, the default is sorting up, and therefore if you were to like sort size-wise, you know, you kind of can see that it's at the end.
00:44:48.639 --> 00:44:51.360
But that is, admittedly, a bit of a stretch, right?
00:44:51.440 --> 00:44:52.480
I'm building a story.
00:44:52.880 --> 00:44:53.760
Oh, for sorting.
00:44:53.840 --> 00:44:58.239
Um not for sorting, but just for first and last, like uh like you just had.
00:44:58.480 --> 00:45:03.039
It's yeah, it's it's and even the tax that Weewa uses for first and last.
00:45:03.119 --> 00:45:23.039
And it's the same thing with the pick, because I I think they say is that it you're supposed to be like picking from one, but then like the the tax, I don't actually anyways, I I don't I don't have I'm I'm waiting for someone to discover the the perfect first and last primitives because or or not pick and weewa, but the the first and last and weewa.
00:45:23.280 --> 00:45:34.000
Um and I've hey I've heard that like in BQN and and APL when you use the the pick or the select, it's kind of supposed to be like a hand, or I guess it's not on camera, it's supposed to be like a hand grabbing something.
00:45:34.239 --> 00:45:42.719
But like, does this mean you're like because I I don't know the visually, what is the argument for this being first tier?
00:45:42.960 --> 00:45:47.280
Like I could build a story either way of it being first or last.
00:45:47.519 --> 00:45:54.079
Because technically it could be pointing like it's kind of an arrow at the beginning, you know, without the tip.
00:45:54.719 --> 00:45:59.199
It's like the latter half of an arrow towards the beginning or whatever, I think.
00:45:59.519 --> 00:45:59.920
Yeah.
00:46:00.159 --> 00:46:06.559
Yeah, but Unicode, uh, you know, it's uh I think every language designer has a little bit of a low-hate relationship with Unicode.
00:46:06.719 --> 00:46:13.679
Um you know, it is never exactly what you want, but uh you can always almost always get close enough, and that's fine.
00:46:13.840 --> 00:46:20.880
But yeah, you know, maybe maybe you know Iverson was luckier, you know, getting to pick whatever he wanted for his primitives.
00:46:21.039 --> 00:46:29.679
And you know, maybe you know, there's some languages that do like just make their own things and uh then you put them on like you know, custom encoding and things like that.
00:46:29.760 --> 00:46:48.159
And uh, you know, it's got the drawback that it's sometimes I think it's nice that you can just draw things however you want them and uh they can become your primitives without having to, you know, slightly alter the existing Unicode characters in a way that doesn't make them too far from them, but you know, you can still read them without the font and things like that.
00:46:48.239 --> 00:46:49.440
You know, it's a bit of a struggle.
00:46:49.679 --> 00:46:50.000
Yeah.
00:46:50.239 --> 00:46:57.199
I don't even know what I would choose if I could design from scratch a first and last primitive, what I would even choose.
00:46:57.440 --> 00:47:09.119
At one point I thought actually the Alpha and Omega from dialog APL was actually kind of nice, but I've always thought that those don't really fit as like primitives.
00:47:09.519 --> 00:47:11.760
Yeah, I think it's definitely better as names.
00:47:11.840 --> 00:47:14.159
They used to be primitives in like the very early days.
00:47:14.320 --> 00:47:16.079
I think I used this for first.
00:47:16.400 --> 00:47:16.800
This one.
00:47:17.199 --> 00:47:20.480
I don't know if there's equivalent for last, but I would use this one.
00:47:20.880 --> 00:47:28.559
That one's decent, I guess, because yeah, it's pointing to the what is canonically the first element of a matrix, I guess, right?
00:47:28.880 --> 00:47:32.400
Yeah, I think it attends to any array in general, like pretty easily.
00:47:32.800 --> 00:47:33.840
Actually, actually, yeah.
00:47:33.920 --> 00:47:36.719
I guess well, I guess we use the arrows for assignment.
00:47:37.119 --> 00:47:38.800
So you can't repurpose those.
00:47:38.960 --> 00:47:44.000
I was gonna say you could just use the left arrow, but those are well technically we'll be like that.
00:47:44.159 --> 00:47:48.079
You know, it just uh slightly looks like an arrow, I suppose, closely now.
00:47:48.400 --> 00:47:55.440
Are there are there primitives on ShapeCatcher for um a left arrow with like a a uh vertical dash through it?
00:47:55.760 --> 00:47:58.559
Oh, like the yeah, left arrow with size.
00:47:59.039 --> 00:48:01.440
Like a sideways version of what WeWa does?
00:48:01.840 --> 00:48:03.920
Yeah, like that's yeah.
00:48:04.159 --> 00:48:06.480
Oh wait, that's already an APL symbol?
00:48:06.719 --> 00:48:07.039
Yeah.
00:48:07.280 --> 00:48:09.039
What what APL uses that?
00:48:09.119 --> 00:48:10.960
Uh I don't remember.
00:48:11.199 --> 00:48:13.679
There's a lot of those that I have no idea where they're actually from.
00:48:13.840 --> 00:48:15.760
Let's see if I can show the whole block.
00:48:16.000 --> 00:48:16.800
Oh, no?
00:48:17.039 --> 00:48:17.760
Okay, whatever.
00:48:18.000 --> 00:48:34.239
There is a lot of primitive uh uh glyphs in the APL block, which either like we're I don't think we're ever to actually use or like only used by very old things, and uh you know some of those nice lot of like quads with arrows and uh with like a jot with uh colon and all that.
00:48:34.800 --> 00:48:39.360
So some of them like could repurpose later for newer things, like the what is it?
00:48:39.519 --> 00:48:44.559
It's cap that uses it for like the um alter product, the the quad with the jot, I think.
00:48:44.800 --> 00:48:46.000
Yeah, yeah, that's cap, yeah.
00:48:46.239 --> 00:48:51.119
Yeah, I think it was used for something else, but then it never really caught on, so it ended up being free.
00:48:51.760 --> 00:48:56.000
So these ones specifically, the arrows with the strokes, I'm not really sure what they're for.
00:48:56.239 --> 00:49:00.000
You know, we were obviously using it right now, but I don't think they were at because of V1.
00:49:01.519 --> 00:49:02.079
Interesting.
00:49:02.239 --> 00:49:07.440
Well, one of these days there will be an array language with the perfect first and last glyphs.
00:49:07.760 --> 00:49:15.039
Anyways, we we also haven't mentioned so I I recently added Tiny Apple to the combinatory logic website.
00:49:15.519 --> 00:49:23.440
And so I don't think I did, I did, if you follow me on any of the Blue Skies or Mastodons, it's on the graphic tab.
00:49:24.559 --> 00:49:26.239
Yeah, now Tiny Apple is there.
00:49:26.480 --> 00:49:28.239
And I've also I've also changed it.
00:49:28.320 --> 00:49:36.000
I mean I made a YouTube video in the past where uh it was had these animating glow boxes, but no one ever commented on it.
00:49:36.079 --> 00:49:48.320
But I've always was subtly upset with the fact that I only would highlight the trains if there weren't any primitives for also spelling the two trains.
00:49:48.559 --> 00:49:54.400
So the B and the B1 combinator and dialogue and BQN were never there.
00:49:54.559 --> 00:49:58.719
No one ever said anything about it, but I always was kind of like that's an incomplete thing.
00:49:58.960 --> 00:50:10.159
And so when I was adding Tiny Apple, I I finally bit the bullet, got rid of the animations, and now just color the the asterisk, which represents the fact that there's a train there.
00:50:10.480 --> 00:50:14.719
A question that came out of this was what was the motivation?
00:50:14.880 --> 00:50:24.079
So you have two different primitives for the S and Sigma combinators, and from what I can tell, they are identical.
00:50:24.239 --> 00:50:26.079
Is that so are they identical?
00:50:26.159 --> 00:50:28.559
And if so, no, what's so there is a difference?
00:50:29.039 --> 00:50:30.400
Only identical monadically.
00:50:30.559 --> 00:50:33.039
You don't have the computers for the dialogue version?
00:50:33.280 --> 00:50:34.639
It's the left and right forks.
00:50:34.880 --> 00:50:36.639
I think we talked about that last time.
00:50:36.719 --> 00:50:37.280
Let's see.
00:50:37.519 --> 00:50:38.400
Let's do it here.
00:50:38.480 --> 00:50:41.280
So if I have was I already entering Apple?
00:50:41.440 --> 00:50:42.079
Yes, I was.
00:50:42.400 --> 00:50:42.639
Okay.
00:50:42.960 --> 00:50:44.800
Let's change a good example.
00:50:44.960 --> 00:50:48.239
So you know how in dialogue you do like not equals what is this?
00:50:48.320 --> 00:50:49.360
No, yeah.
00:50:49.679 --> 00:50:53.039
Not equals partition rights at the best.
00:50:53.360 --> 00:50:54.800
Oh yeah, for splitting on spaces.
00:50:55.840 --> 00:50:57.119
Oh, like on the keyboard, okay.
00:50:57.280 --> 00:50:59.519
Yeah, and it splits on like uh places or whatever.
00:51:00.000 --> 00:51:03.920
You know, there's a tag here, so it means it's kind of useless stuff.
00:51:04.159 --> 00:51:07.840
You know, it's not really doing anything, just it's just saying grab the right argument.
00:51:08.559 --> 00:51:09.519
I don't think it's gonna work.
00:51:12.639 --> 00:51:12.960
Yeah.
00:51:13.280 --> 00:51:19.039
This tag here is not saying anything, there's no meaning attached to it, just saying grab this argument.
00:51:19.280 --> 00:51:21.760
So you can reduce it to just two functions, right?
00:51:21.840 --> 00:51:25.360
So it's the not equals and the partition, those are the important ones.
00:51:25.599 --> 00:51:30.320
And then you can so that you just use a combinator for that, and it's the left fork combinator.
00:51:30.559 --> 00:51:36.079
So it's called left fork because uh you specify like the leftmost functions of a fork.
00:51:36.320 --> 00:51:39.440
So the the rightmost one is implicitly a right tack.
00:51:39.599 --> 00:51:41.599
So if I do this, what happened?
00:51:41.840 --> 00:51:43.679
Oh, it has to be like this, I think.
00:51:44.159 --> 00:51:44.639
Yeah.
00:51:44.880 --> 00:51:49.360
So you just this is the same as using like little banana brackets like this.
00:51:50.559 --> 00:51:50.800
Right.
00:51:51.199 --> 00:51:55.360
And the other one is just a schematic version, and the implicit one is the left duck, of course.
00:51:55.440 --> 00:52:03.280
But moradically, they just have the same meaning as the the hooks because I I don't know, I just couldn't find anything that was useful other than that.
00:52:03.599 --> 00:52:03.840
I see.
00:52:03.920 --> 00:52:04.639
So that's what happened.
00:52:04.719 --> 00:52:13.280
I tested this on monadic use cases and then came to the conclusion that they were the same, but they're only the same in the monadic case, not in the dyadic case.
00:52:13.599 --> 00:52:20.320
And I guess, yeah, so Adam Adam's pointing out that there's a bunch of combinators that are missing from my table.
00:52:20.960 --> 00:52:21.760
That's a good question.
00:52:21.920 --> 00:52:26.559
Should I go add the rows that haven't don't have representation there?
00:52:26.719 --> 00:52:30.000
Because historically there was no array language that had those.
00:52:30.079 --> 00:52:34.960
But now I guess Wewa has a bunch of the Nike.
00:52:35.920 --> 00:52:36.159
Let's see.
00:52:36.559 --> 00:52:38.559
This one I think we want, this one isn't.
00:52:38.960 --> 00:52:40.719
Just some for me, I think.
00:52:40.960 --> 00:52:45.039
This one and this one aren't, but they're just you know not that important to me.
00:52:45.599 --> 00:52:48.000
They're just like swapped versions of the other ones.
00:52:48.079 --> 00:52:48.960
So like so.
00:52:49.039 --> 00:52:54.000
If I write F atop G, I can always write G reverse it up F.
00:52:54.079 --> 00:52:59.360
It's just the same thing, but it saves on like those sometimes it's easier to read compositions the other way.
00:52:59.519 --> 00:53:02.000
Yeah, just for reading other reverse it up.
00:53:02.400 --> 00:53:04.639
No, that's uh I don't remember like this.
00:53:04.719 --> 00:53:10.239
Yeah, reverse it up is just the same as doing sorry, what's called over, yeah, F reverse over, yeah.
00:53:10.400 --> 00:53:14.320
So these ones, the Q bird is from the Smollyon book, I think.
00:53:14.559 --> 00:53:17.599
This one I just made up to be honest, and this one as well.
00:53:17.920 --> 00:53:20.480
Uh I'm trying to think if there's anything else.
00:53:20.639 --> 00:53:23.599
Yeah, the hooks I think you already called them Z bro, yeah.
00:53:23.760 --> 00:53:29.119
So yeah, I think the main ones that I would add are these two because they are both in Tiny Apple and in Weewa.
00:53:29.360 --> 00:53:31.920
Maybe the ones that only I have, they're not that important.
00:53:32.000 --> 00:53:35.119
You know, if somebody else has them, maybe they become important, you know.
00:53:35.440 --> 00:53:39.519
And definitely not that important in the grand scheme of things, you know.
00:53:39.599 --> 00:53:39.920
Yeah.
00:53:40.239 --> 00:53:57.760
Yeah, it makes sense, I guess, why or I'm actually I'm not sure about in Wiwa, but in Tiny Apple or just in general in APLs if that have forks, they aren't necessarily going to save you characters.
00:53:58.000 --> 00:54:08.400
Although in CAP, CAP would actually benefit from them in the case where you might need it, because it would save you having to write the fork syntax, right?
00:54:08.559 --> 00:54:08.719
Yeah.
00:54:08.960 --> 00:54:10.480
It would save you two characters.
00:54:10.719 --> 00:54:19.199
And in that case, it probably is, it does seem more irritating to write like the double angle and then just to put an identity there, right?
00:54:19.280 --> 00:54:24.880
Like that seems a little bit I guess if you're just in a three-train and in dialog APL, it's not that bad.
00:54:25.119 --> 00:54:27.840
But yeah, in general, I mean that's what combinators are, right?
00:54:27.920 --> 00:54:36.880
There when you have an identity or a W combinator, a duplicator, like those just become new combinators because you can omit that stuff.
00:54:37.199 --> 00:54:38.320
Interesting, interesting.
00:54:38.480 --> 00:54:43.760
So yes, I will consider adding because both Weewa and Tiny APL have the Nicator birds.
00:54:43.920 --> 00:54:47.760
And I think was it did those come from Smollian or did uh did Kai make those up?
00:54:48.159 --> 00:54:55.119
I think uh I researched this when I made the page, and I think no, I don't know actually.
00:54:55.280 --> 00:54:57.920
I I couldn't find any area reference.
00:54:58.079 --> 00:55:01.519
I think they're from Kai, but I didn't ever actually ask him.
00:55:01.599 --> 00:55:11.440
I think also the zebra dove, I think is his uh the zebra dove I think I made up, but I I made it up just like I was like, I need some other dove.
00:55:11.840 --> 00:55:14.079
Yeah, and that was the one that I ended up chosing.
00:55:14.320 --> 00:55:15.679
Yeah, the same with the violet starling.
00:55:16.000 --> 00:55:17.199
The weewa page for sure.
00:55:17.360 --> 00:55:17.760
Uh okay.
00:55:17.840 --> 00:55:20.079
Yes, maybe the Nicators though I didn't.
00:55:20.639 --> 00:55:22.480
If it didn't do this one, I think it was Kai.
00:55:22.639 --> 00:55:27.440
I couldn't find any earlier reference around other than the Wiwa pages, so it's probably inevitable.
00:55:28.000 --> 00:55:30.559
Let's see, let's see if I can get an Eastern Nicator.
00:55:30.960 --> 00:55:35.840
You're not yeah, yeah, you're not gonna see this, but oh except watch this as I crash.
00:55:36.400 --> 00:55:37.440
Oh, it's cute bird.
00:55:37.599 --> 00:55:39.440
That's not that's not what I meant to do.
00:55:39.679 --> 00:55:41.679
But uh it's alright.
00:55:41.920 --> 00:55:43.679
Is it as good as a zebra dove?
00:55:44.079 --> 00:55:50.960
Let me tell you folks, it's not well, I gotta be honest, I was expecting that to look a little bit more like a zebra than it does.
00:55:51.599 --> 00:55:53.760
Anyways, I bombard, I guess.
00:55:53.920 --> 00:55:55.199
Oh, wait, you were showing it the whole thing.
00:55:55.360 --> 00:55:58.079
Here I am trying to hover up, but uh we're doing the same thing.
00:55:58.159 --> 00:56:03.280
I was blocking uh, I guess yeah, your zebra dove looks a little cuter than my zebra dove that I came up with.
00:56:03.519 --> 00:56:06.400
All right, so I mean we've got uh 20 or 25 minutes left.
00:56:06.480 --> 00:56:10.719
Uh, one of the things that I said that maybe we could do, I can send you the link if you want.
00:56:10.880 --> 00:56:16.800
So, and I actually too, maybe before I we switched to our our kind of last thing.
00:56:16.960 --> 00:56:22.639
Are there are there things that we haven't touched on that you maybe wanted, I mean, just while you're on TASIC talk to to bring up to chat about?
00:56:22.800 --> 00:56:26.400
I mean, have we talked about AP8L previously?
00:56:26.639 --> 00:56:26.800
No.
00:56:26.960 --> 00:56:27.440
I don't think so.
00:56:27.760 --> 00:56:28.320
I don't think so.
00:56:28.639 --> 00:56:29.760
That's definitely worth highlighting.
00:56:30.480 --> 00:56:34.239
Yeah, I just uh one second and I'll share the another screen.
00:56:34.719 --> 00:56:41.519
Yeah, this was uh I made it to doing the you know, the kind of like burnout from Tiny Apple.
00:56:41.679 --> 00:56:49.599
You know, it's starting to to end that one, but you know, I was trying to to get back into doing uh array stuff, so I made uh a whole new language.
00:56:49.920 --> 00:56:50.960
As one does.
00:56:51.519 --> 00:56:55.440
You get burned out from one array language and then you just go create a whole new one.
00:56:55.760 --> 00:56:57.679
Uh let's see if I can share my screen.
00:57:01.360 --> 00:57:01.599
Okay.
00:57:02.079 --> 00:57:03.199
Ooh, look at that.
00:57:04.000 --> 00:57:13.119
Yeah, it's just this one is uh a lot is very much inspired by you know old EPL, so it's got no nesting at all.
00:57:13.519 --> 00:57:25.119
It's m very similar to EPL 360, except the function definition is slightly different, but there's like you know, it's mostly draw-massed as branching and things like that, which Tiny Apple doesn't have.
00:57:25.440 --> 00:57:31.679
There is a few like modern things, like there is essentially orientation with uh curly grasses.
00:57:32.079 --> 00:57:34.880
Um trying to see if there's like a square root lift.
00:57:35.360 --> 00:57:35.840
So cute.
00:57:36.079 --> 00:57:36.960
I think I have a point.
00:57:38.239 --> 00:57:41.440
Oh all the points.
00:57:43.039 --> 00:57:49.280
Oh, this is uh yeah, d I feel like I've seen a K dock screen similar to this.
00:57:49.599 --> 00:57:54.239
Because it shows the monadic on one side and the dyadic on the other side, correct?
00:57:55.440 --> 00:57:59.599
Oh you might be frozen.
00:58:00.800 --> 00:58:04.800
Alright, well bear with us folks while Madeline rejoins.
00:58:07.199 --> 00:58:08.239
You're back.
00:58:09.360 --> 00:58:11.760
Although is your audio working?
00:58:12.159 --> 00:58:13.280
Yeah, it looks like it's working.
00:58:13.679 --> 00:58:13.920
Great.
00:58:17.840 --> 00:58:19.599
Yeah, it's definitely inspired by K.
00:58:20.400 --> 00:58:21.920
I'm not sure what last thing we're saying.
00:58:22.239 --> 00:58:34.239
Yeah, so I kind of like, you know, not being able to fit any more things in this page kind of made you stop, which is probably a good thing because uh, you know, some projects have to be complete sometimes, you know, you can just keep adding things forever.
00:58:34.800 --> 00:58:37.039
Yeah, this looks well, I can see you look at this.
00:58:37.280 --> 00:58:41.840
AP8L also has first and last, as you can see in the bottom left corner.
00:58:41.920 --> 00:58:47.039
So really, really making the uh the languages that don't have it look bad.
00:58:47.280 --> 00:58:49.599
And but I'm seeing a couple things.
00:58:49.840 --> 00:58:53.440
Is pivot just a uh name for dyadic transpose?
00:58:54.159 --> 00:58:55.920
Yes, it's a we were name for it.
00:58:56.000 --> 00:59:00.559
Um the primitive orient, but orient is like the inverse of transpose.
00:59:00.800 --> 00:59:07.599
So if you do the inverse of orient, you get uh, you know, it's I don't think it's an official name, but the community usually calls it pivot.
00:59:07.760 --> 00:59:10.800
So I called it that because you know dyad transpose is too long.
00:59:11.280 --> 00:59:15.920
And what is uh I see group, and then below that I see groon.
00:59:16.000 --> 00:59:18.719
So I guess my question is Oh no, it's grade up and grade down.
00:59:19.039 --> 00:59:19.840
Oh, great.
00:59:20.320 --> 00:59:24.719
These are supposed to look like the great characters, but there's not much you can do in five by three, you know.
00:59:24.880 --> 00:59:28.639
I tried to make that I think those are suggested by someone else actually.
00:59:28.719 --> 00:59:32.079
Uh asked in the farm for some ideas, and somebody suggested these.
00:59:32.320 --> 00:59:32.880
Oh, I see.
00:59:32.960 --> 00:59:35.519
There's a a slight difference between the D and the O.
00:59:35.679 --> 00:59:38.000
I was looking or Yeah, okay, yeah, it isn't O.
00:59:38.079 --> 00:59:38.800
I was gonna like it.
00:59:38.880 --> 00:59:40.480
That's sort up and sort down.
00:59:40.960 --> 00:59:45.519
Okay, so grade up and grade down, solo pair, drop take.
00:59:45.840 --> 00:59:52.320
Okay, so basically, yeah, this is this is I mean a couple different names for things and a couple new things like square root and root.
00:59:52.480 --> 00:59:53.119
But very cool.
00:59:53.199 --> 00:59:55.760
And people can go and play with this online if they want.
01:00:00.639 --> 01:00:03.039
I Marsha made a week page for me.
01:00:03.119 --> 01:00:04.480
I'm very thankful for that.
01:00:04.719 --> 01:00:06.000
I think it's linked there.
01:00:11.039 --> 01:00:15.119
I can't find my oh no.
01:00:15.599 --> 01:00:24.320
I can't find my the the the window to share, but uh if you go on the weekend and you look up my name, you can find the link to detail that.
01:00:24.960 --> 01:00:25.119
Okay.
01:00:25.599 --> 01:00:28.400
I mean I can share the uh the next one if you want.
01:00:28.480 --> 01:00:29.840
Or if you want, you can share it.
01:00:29.920 --> 01:00:32.079
Uh which one you want me to share?
01:00:32.400 --> 01:00:37.360
Yeah, I'm having a little bit of problems we have sharing, so you should do it smart in that area.
01:00:37.760 --> 01:00:40.239
Let's which what which screen should I share on?
01:00:40.559 --> 01:00:45.679
I think I'll share on and so we're gonna also have to go.
01:00:45.920 --> 01:00:52.880
I can't even actually remember what the name of the problem is, but I guess we don't need it.
01:00:53.119 --> 01:01:00.320
And let's make this full screen, and I will share I guess just the window is fine.
01:01:01.199 --> 01:01:02.880
So hopefully this should work.
01:01:03.440 --> 01:01:07.440
So this was a problem I don't actually remember.
01:01:07.519 --> 01:01:16.800
I'm pretty sure it was a pro weekly challenge that I solved a while ago, and I'm pretty sure was it the first one?
01:01:17.119 --> 01:01:24.880
And I think I think the name of the problem I've taken now, whenever there's a problem on Pro Weekland Challenge, I try and abbreviate it to like two characters.
01:01:24.960 --> 01:01:27.920
So I think this is like text justification.
01:01:28.239 --> 01:01:48.159
And this was the solution that I came up with in Tiny Apple, and essentially the problem is you're given a number and you're given a string, and you're supposed to center justify as best as possible that string in asterisks.
01:01:48.559 --> 01:01:53.679
So, I mean, I guess we should just put can I do this with the lowercase?
01:01:53.920 --> 01:01:58.639
And we put N, N, N, and that's the idea, right?
01:01:58.719 --> 01:02:12.400
So if if I change, keep on changing this, and if you ever have like an odd number, you're supposed to put the one less asterisk on the left, or one one less on the yeah, one less on the left, and then have one extra on the right.
01:02:12.639 --> 01:02:26.800
And so this was the solution that I came up with, which if we go through it, we're getting the length of our string, and then we are dividing that by two after subtracting our total length.
01:02:27.039 --> 01:02:41.519
And you had so we're gonna the for the rest of this, we I I have a meeting in the 17 minutes, but uh I often I will uh when I'm doing this in Tiny Apple, after I've solved it, I'll send it to Madeline and be like, How can I do this better?
01:02:41.840 --> 01:02:48.159
Because whenever you have something this long, my first thought is like this can't be the best possible solution to this.
01:02:48.480 --> 01:02:56.719
And I think this was your first stab at like changing mine, but then ultimately this is what you had.
01:02:56.880 --> 01:02:59.280
And I have this was I don't know, when when do you think this was?
01:02:59.440 --> 01:03:00.559
A couple months ago, something like that.
01:03:00.800 --> 01:03:02.000
But yeah, definitely feel why.
01:03:02.239 --> 01:03:03.679
It was it wasn't recently.
01:03:04.000 --> 01:03:17.360
And I said, I'm gonna have to take some time to understand everything that's going on here because I'm not familiar with On Left, and there was a couple other things that you had done.
01:03:17.519 --> 01:03:28.159
And anyway, so maybe we can go through, and I think there was one thing you said that this could be this could be shortened, or I was doing something inefficiently here.
01:03:28.239 --> 01:03:28.960
Do you remember that?
01:03:29.280 --> 01:03:35.920
I think that the second one was your attempt at making it tacit, and uh yeah, this was my attempt at making it tacit.
01:03:36.239 --> 01:03:43.760
There was like a a a bunch of extra brackets that you didn't need that you could move maybe with nothing or with other compositions and things like that.
01:03:43.920 --> 01:03:49.760
And I think if I remember correctly, that I tried like reducing yours as much as possible and ended up being shorter than mine.
01:03:50.000 --> 01:03:54.559
So like your approach was better, but uh you know, you just needed a little bit of refining, I think.
01:03:54.800 --> 01:04:02.960
There's like uh yeah, a thing I can immediately see is that you have like you go like with his two opening brackets like that next to each other.
01:04:03.280 --> 01:04:04.960
The for on the left or the right?
01:04:05.199 --> 01:04:05.760
Yeah.
01:04:06.079 --> 01:04:16.079
Like you're just it's like two atops in a row essentially, so you can remove the inner ones and make them into like with nothing, I think.
01:04:16.400 --> 01:04:17.440
No, not that one.
01:04:17.599 --> 01:04:25.280
Um I don't remember exactly, but you know, there's a lot of places where you could like compose things a little bit differently to get a showter expression.
01:04:25.360 --> 01:04:28.719
Yeah, but the idea is mostly the same within R2, I think.
01:04:28.960 --> 01:04:29.199
Right.
01:04:29.280 --> 01:04:39.840
And so you essentially I think you just build the two strings and then rotate them into place, whereas I built them separately and then combine them at the end, I think it's enough.
01:04:40.320 --> 01:04:44.719
And so on left on left is literally just the same as the top left.
01:04:44.880 --> 01:04:46.880
Same thing, but one less character.
01:04:47.360 --> 01:04:50.480
On left is the same thing as a top left?
01:04:50.719 --> 01:04:51.039
Yeah.
01:04:51.440 --> 01:04:57.039
So if you call it dyadically, it's gonna apply the function just to left argument and completely ignore the right one.
01:04:57.679 --> 01:04:58.719
Oh, okay.
01:04:58.880 --> 01:04:59.760
That's good to know.
01:04:59.840 --> 01:05:02.800
And so you have both on left and on right.
01:05:03.440 --> 01:05:11.679
And I guess yeah, so so your tip is in general that whenever you see a top atop, like so.
01:05:11.760 --> 01:05:18.800
I guess you were saying here, um now these are two autopsy, I can get rid of these two things potentially.
01:05:19.119 --> 01:05:27.679
Yeah, those are being given to an over, so not right now, but you can if you move switch essentially, yeah.
01:05:27.760 --> 01:05:28.719
You can do it like that.
01:05:29.280 --> 01:05:32.320
Yeah, or if you want, you can use the reverse over from before.
01:05:32.400 --> 01:05:35.920
So you could take all of the parentheses and move the already over.
01:05:36.800 --> 01:05:42.239
Oh, so because we only have because the right one is a single glyph, so you can switch it.
01:05:42.400 --> 01:05:43.360
I mean you don't need the market.
01:05:43.599 --> 01:05:48.400
So you know, it just is mostly golf, but you know, it's really satisfying to get short of things.
01:05:48.639 --> 01:05:49.679
Oh did I not did I not?
01:05:51.840 --> 01:05:59.519
And so this is actually I I never use this this glyph, so this is the shift, shift, this is the reverse bind.
01:06:00.239 --> 01:06:03.280
Which I don't think I've ever successfully used.
01:06:03.679 --> 01:06:05.280
The question is, is can I type it?
01:06:05.360 --> 01:06:05.760
There we go.
01:06:06.000 --> 01:06:06.239
Yeah.
01:06:06.320 --> 01:06:11.599
And then you're gonna need uh another between the enclose and replicate because uh it was removed.
01:06:11.840 --> 01:06:13.119
Yeah, I think that's gonna work.
01:06:13.280 --> 01:06:13.440
Yeah.
01:06:13.599 --> 01:06:13.760
All right.
01:06:14.000 --> 01:06:15.119
So that's it'll be shorter for that.
01:06:15.360 --> 01:06:17.199
That's like one or two shorter.
01:06:17.440 --> 01:06:20.400
Um let's see if I can see anything here.
01:06:20.880 --> 01:06:30.719
Usually when you have like a lot of uh brackets at the end, you can remove some of them because it means that you're like composing things with trains when you could be composing them with something else.
01:06:30.960 --> 01:06:32.159
See if I can see.
01:06:32.480 --> 01:06:40.639
I think that the one after the right catenate, you can just remove the train bracket after that and then one at the very end.
01:06:40.719 --> 01:06:41.840
I think that's going to work.
01:06:42.320 --> 01:06:43.360
This guy right here?
01:06:43.599 --> 01:06:45.280
No, the other catenate.
01:06:45.679 --> 01:06:46.320
That yeah.
01:06:46.480 --> 01:06:52.400
If you can remove the bracket right after that, and then one at the very end, I think that's going to work.
01:06:52.880 --> 01:06:53.280
Yeah.
01:06:53.519 --> 01:06:54.159
Oh no.
01:06:54.880 --> 01:06:55.920
Yeah, I don't know.
01:06:56.000 --> 01:07:01.599
I'd be hard to do it right now, but yeah, no, yeah, it does definitely have to like you could remove again.
01:07:01.840 --> 01:07:08.400
Yeah, I don't exactly uh Well, so actually, so this is a right tack.
01:07:08.559 --> 01:07:10.960
So actually this seems like it might be a combinator, right?
01:07:11.039 --> 01:07:12.480
We just had the forks.
01:07:12.639 --> 01:07:15.840
This is I think it's just a hook because it's monadic.
01:07:16.000 --> 01:07:25.039
But if it's not, it's not a combinator because essentially so the left fork has an implicit right tack and the right fork has an implicit left tack.
01:07:25.119 --> 01:07:35.840
So because the things that you want to keep are on the right, you're gonna have to use the right tack, but then the the sorry right fork, but then the implicit attack is going to be the left one, so it's not what you want.
01:07:36.079 --> 01:07:38.000
You can probably do it with some commutes.
01:07:38.159 --> 01:07:43.920
So if you use a left tack and a commute, I think it works, but I'm not sure exactly what I'm saying.
01:07:44.079 --> 01:07:45.519
I have to try to understand.
01:07:45.840 --> 01:07:49.039
I don't really have a way to find the link myself here.
01:07:49.599 --> 01:07:50.800
Yeah, that's what I was thinking.
01:07:50.880 --> 01:07:54.400
You could do some commute, but then would it actually be shorter at the end of the day?
01:07:54.719 --> 01:07:55.519
Yeah, I'm not sure.
01:07:55.760 --> 01:07:58.800
Maybe if you combine it, we all think it's gonna be the end of the folder.
01:07:58.960 --> 01:07:59.440
I'm not sure.
01:07:59.599 --> 01:08:02.159
I think mine, I'm trying to read it right now.
01:08:02.480 --> 01:08:09.519
Yeah, I just like divide the thing in half and then I I do the floor and the ceiling, and I use one on the left and one on the right.
01:08:09.599 --> 01:08:12.320
So I don't be biased uh the way you want it to be.
01:08:13.039 --> 01:08:14.400
I mean this doesn't work, right?
01:08:14.559 --> 01:08:17.199
If I do Oh, it does work.
01:08:17.439 --> 01:08:18.159
Oh yeah, it could work.
01:08:18.239 --> 01:08:20.640
Oh wait, did I did I I know I did evaluate that.
01:08:20.880 --> 01:08:21.600
So that works.
01:08:21.760 --> 01:08:27.760
So now I mean, well, if we get rid of the spaces in the explicit solution, we're still a couple characters longer.
01:08:28.000 --> 01:08:30.079
But so this is all one fork.
01:08:30.319 --> 01:08:30.800
Yeah.
01:08:31.119 --> 01:08:33.600
This is a fork.
01:08:34.319 --> 01:08:37.920
That's and then this is uh a fork as well.
01:08:38.159 --> 01:08:46.319
I mean there's a I mean there's a I mean that's uh it's probably a lot of work, but that's this is where it would be a killer feature, is if you had the uh the train trees.
01:08:46.560 --> 01:08:46.800
Yeah.
01:08:47.920 --> 01:08:50.640
I can't like train like boxes, I guess.
01:08:50.720 --> 01:08:52.560
I already have the structure for that trees.
01:08:52.720 --> 01:08:58.159
It's probably gonna take more work for sure, but yeah, eventually they're very nice to look at, so I'm probably gonna have them at some point.
01:08:58.479 --> 01:09:04.960
Yeah, it helps with readability or and shouldn't say readability, understandability uh quite a bit.
01:09:05.199 --> 01:09:15.199
But defin definitely, yeah, like when I see this, I still think to myself, like, there's gotta be a way, a much nicer way, because we've got what, eight banana brackets on screen right now.
01:09:15.520 --> 01:09:17.359
But yeah, maybe we'll leave it at this.
01:09:17.439 --> 01:09:20.239
But yeah, yours making use of on left.
01:09:20.479 --> 01:09:26.000
It's also making use of the left fork, which is uh really, really nice.
01:09:26.159 --> 01:09:29.199
Anyways, maybe I'll also post this so folks.
01:09:29.359 --> 01:09:34.159
Well, I mean, uh the solution to this is that I just have to release my leak golf website.
01:09:34.399 --> 01:09:37.760
But now uh because of AI, I've just got too many things that I'm working on.
01:09:37.840 --> 01:09:43.439
I've got a Raybox, I've got Leak Golf, there's not enough time in the day to do everything.
01:09:43.760 --> 01:09:48.880
AI just needs to get a little bit better, and uh then ever then everything will be shipped off into the world.
01:09:49.199 --> 01:10:03.039
All right, let me uh stop sharing and then maybe for the last or I got multiple cursors, and for the last uh couple minutes, I haven't been checking the the chat, but I imagine that there's been uh a couple questions.
01:10:04.239 --> 01:10:07.520
And so, yes, there has been a couple questions in the chat.
01:10:07.600 --> 01:10:11.840
So if you have questions, yeah, for the last five minutes here, feel free to ask Madeline.
01:10:11.920 --> 01:10:17.359
So one that looks like you already answered what does cells slash cells do?
01:10:17.760 --> 01:10:28.880
And then you typed transl well, that looks like a Chinese character, but it says like BQN cells, and then so it's just an operator.
01:10:29.359 --> 01:10:37.439
And then Adam said for a modern old flat APL, wouldn't a rank operator make sense?
01:10:37.920 --> 01:10:45.760
Yes, I have most of the code for rank operator already working because I have function access and it's implemented using rank.
01:10:45.840 --> 01:10:48.720
But if I remember correctly, it's like a few issues with it.
01:10:48.960 --> 01:10:56.159
But yeah, probably if I end up fixing those, I'm gonna replace cells with rank, because it's you know definitely more general.
01:10:56.239 --> 01:11:02.880
But I mostly have the cells because just I don't have a way to loop at all inside like functions and stuff, so that was close enough.
01:11:02.960 --> 01:11:05.760
But yeah, I definitely want rank at some point, I think.
01:11:06.079 --> 01:11:10.720
So is Tiny Apple currently doesn't have oh no, it is about AP8L.
01:11:11.039 --> 01:11:12.560
Oh, this is uh AP8L.
01:11:12.880 --> 01:11:24.960
I was gonna say I definitely I recall using uh rank in Tiny Apple, and that would be shocking if in the 200 primitives you didn't you didn't have rank, so this is uh AP8L.
01:11:25.199 --> 01:11:29.039
Oh yeah, and seamlessly, you know, kind of like a rank fangirl.
01:11:29.119 --> 01:11:31.840
So I would definitely keep it uh everywhere.
01:11:32.239 --> 01:11:32.560
Okay.
01:11:32.800 --> 01:11:40.560
Well, while we wait to see if there's one other, you know, final question from or uh cap programming like uh wrote programming language.
01:11:40.880 --> 01:11:42.399
It says 200 isn't enough.
01:11:42.479 --> 01:11:43.359
I assume that's Elias.
01:11:43.680 --> 01:11:47.680
But then it's wrong user of the language self-speaking.
01:11:48.000 --> 01:11:51.039
I'm not sure if that's a joke, but uh like I've we were mentioning that earlier.
01:11:51.119 --> 01:11:53.760
That yeah, I mean I I don't think 200's the limit.
01:11:53.920 --> 01:12:00.159
I I don't know what it is, but like you need 2,000 Chinese or 4,000 Chinese characters just to read a basic newspaper.
01:12:00.319 --> 01:12:06.479
And like, you know, kids in elementary school do that, so you know, we just we need more Unicode symbols.
01:12:06.640 --> 01:12:10.880
And Adam's saying, Where can I find AP8L?
01:12:14.399 --> 01:12:19.439
Uh it's here on my wiki page.
01:12:19.520 --> 01:12:21.920
You can click AP8L and sneak here.
01:12:23.439 --> 01:12:44.399
I was thinking of adding like a table with the parentheses since there's like extra information that's not on the actual implementation, which is about like the the because there is no Unicode in uh in Pico8, so every character has like uh you know a byte associated to it, and I thought maybe adding it to the wiki would be useful, but uh I even asked Marshall Get if I can do that.
01:12:44.479 --> 01:12:46.159
Uh I'm gonna ask him soon.
01:12:48.000 --> 01:12:57.760
Alright, so we've got one last question, and it says, is there any exploration into Hangel style symbol composition for Iversonian language?
01:12:58.000 --> 01:13:00.640
I do not know what Hangel style is.
01:13:00.800 --> 01:13:01.119
Do you?
01:13:01.520 --> 01:13:08.000
Hangle is the Korean alphabet kind of so it's basically like uh every syllable is a glyph.
01:13:08.079 --> 01:13:17.840
Uh I don't have a Hangle keyboard right now, but let's see if we can see so each glyph is a syllable, but the syllable is composed of different characters.
01:13:18.079 --> 01:13:28.560
So each character is a sound, and then you know, each group of characters is a syllable, and maybe I guess it's something like maybe like modifiers apply above and below instead of to the side and not something like that.
01:13:28.800 --> 01:13:30.399
I suppose it's the suggestion.
01:13:30.720 --> 01:13:37.439
Yeah, it would definitely be cool, but if it would be you know even further from Unicode, which is you know definitely a choice that you can make.
01:13:38.000 --> 01:13:39.600
Alright, we still got a couple minutes.
01:13:39.680 --> 01:13:49.680
Uh and Max asks, aka Meme God, are there any frameworks for implementing array languages so users can pick symbols, array models, tacit models, etc.?
01:13:50.239 --> 01:13:51.439
I don't think so.
01:13:51.680 --> 01:13:52.000
Do you?
01:13:52.159 --> 01:13:53.439
You're not aware of any, are you?
01:13:53.760 --> 01:13:57.600
I don't know of any, but it would definitely be a really cool thing to have.
01:13:57.680 --> 01:14:07.520
So though you know that's always a problem of like if everything is like different variations of the same stencil, uh, I don't know how good having all of the variations is.
01:14:07.600 --> 01:14:16.800
You know, you know, starting from scratch, you can do like more graphic design decisions, I guess, which uh you don't get by just you know picking and choosing between different types of things.
01:14:17.039 --> 01:14:28.800
Yeah, it'd be pretty tricky to build build your own language like website because the way the primitives interact it'd probably be quite limited, but it's still an interesting idea.
01:14:29.119 --> 01:14:41.920
And yeah, Alice is saying that uh the problem is that if you're gonna go and create a bunch of more primitives, you're probably gonna end up going outside of Unicode, which is a pretty big ask.
01:14:42.159 --> 01:14:46.399
Anyways, we are at the the half hour mark, so I'll say thank you so much.
01:14:46.560 --> 01:14:50.239
I mean, like I I said in one of my previous YouTube videos, this was long overdue.
01:14:50.479 --> 01:15:02.079
And I can't confirm who we hopefully are gonna be having on the next array cast, but hopefully we'll have a guest and be a similar conversation to this catching up on the the latest and greatest.
01:15:02.239 --> 01:15:16.319
Yeah, hopefully uh the next time we chat won't be a year from now, and and by then we'll have I mean, even if we're not talking about what's the latest developments with uh projects, it's always nice to chat just about I don't know, design, tacit model, primitives, etc.
01:15:16.800 --> 01:15:23.680
There's no endless or shortage of topics to chat about when chatting about these different array languages.
01:15:23.760 --> 01:15:27.600
So great to chat, Madeline, and uh hopefully we'll we'll do this again sometime soon.
01:15:28.000 --> 01:15:28.720
Thanks for having me.
01:15:28.880 --> 01:15:30.319
Always nice to talk with you.
01:15:30.560 --> 01:15:31.439
Awesome.
00:00:00.400 --> 00:00:04.959
Welcome to Tacit Talk, episode, I believe, 35.
00:00:05.280 --> 00:00:10.560
And I am extremely excited to have back a guest that it's been, I believe, over a year.
00:00:10.720 --> 00:00:13.439
I think it was February of 2025.
00:00:13.679 --> 00:00:15.119
I'm not going to recall the episode.
00:00:15.199 --> 00:00:18.239
It was probably like episode 15 or something, that plus or minus.
00:00:18.320 --> 00:00:25.280
But we're having back Madeline Vrigani, creator of many things, probably, I'm actually not sure what most folks know you for.
00:00:25.440 --> 00:00:34.320
It's probably Tiny Apple, but also uh creator of the Omnibar, a fantastic tool for comparing glyphs across all the different APLs.
00:00:34.560 --> 00:00:39.520
More recently, creator of, I'm not sure if I'm gonna pronounce this correctly, AP8L.
00:00:39.600 --> 00:00:41.920
I'm not sure if it has a Q is that correct?
00:00:42.079 --> 00:00:42.240
Yeah.
00:00:42.399 --> 00:00:42.880
That's correct.
00:00:43.039 --> 00:00:50.000
All right, because I know that what is it, Kubernetes has some like K8s, but they pronounce it weird when they're doing their conferences.
00:00:50.159 --> 00:00:59.600
Anyway, so uh, and potentially creator of other things that I don't even know about, but primarily we're we're having you back on to talk about the editions that have been released since the last time we had you on.
00:00:59.679 --> 00:01:09.680
I believe it was on either dot, I think it was dot 10 last time, and so you've released officially dot 11 and dot 12, but we are on dot 13 beta of tiny Apple.
00:01:09.840 --> 00:01:11.599
We also might chat about some other things.
00:01:11.760 --> 00:01:15.359
You just released a blog post, I think it was today.
00:01:15.519 --> 00:01:16.959
Was it today or in the last couple days?
00:01:17.200 --> 00:01:18.159
Yeah, this morning, yeah.
00:01:18.319 --> 00:01:19.120
Just this morning.
00:01:19.359 --> 00:01:31.359
And uh was mentioning inverses, and I was I was before this even started, I was thinking I got some questions, but I'll just wait until we're chatting on Tacitalk so that folks in the future can uh get the I guess what is it?
00:01:31.519 --> 00:01:35.200
The the knowledge that I will accrue by asking you, they will also have access to.
00:01:35.280 --> 00:01:36.799
So, anyways, thanks for coming back on.
00:01:36.879 --> 00:01:37.359
How's it been?
00:01:37.439 --> 00:01:43.519
And yeah, well, I guess we can start with uh a tiny apple, but yeah, what's what's what's new and and and how's it been?
00:01:44.079 --> 00:01:47.280
A while there's been you know some breaks between adding new things.
00:01:47.359 --> 00:01:48.000
I'm back right now.
00:01:48.159 --> 00:01:52.079
You can see I'm sharing the history thing that I added, but yeah, for sure the main thing is inverted.
00:01:52.239 --> 00:01:53.359
Let me see if I can.
00:01:54.879 --> 00:01:55.760
It's a lot of stuff.
00:01:55.920 --> 00:01:56.079
Okay.
00:01:56.400 --> 00:01:59.120
So it's very much inspired by Wewa.
00:01:59.519 --> 00:02:04.319
So there is a ton of different like ways a function can be inverted based on how you use it.
00:02:04.480 --> 00:02:10.159
You know, in like dialogue, usually there's just like mm-hmm you do like power minus one to get the inverse of a function.
00:02:10.400 --> 00:02:18.400
And it's like you can invert it like majorly or you can invert it dyadically, and by like the left argument gets binded automatically.
00:02:18.560 --> 00:02:22.639
So wewa calls the first one an uninverse, so it just has the same name here.
00:02:22.879 --> 00:02:28.560
And then the second one, uh I guess it's a bit different because the arguments are like ordered differently because there's a stack and whatever.
00:02:28.800 --> 00:02:32.639
Uh I doesn't want me to say there's a stack, but uh kind of it's a stack.
00:02:32.719 --> 00:02:42.400
So yeah, the the binding thing is called anti, which is uh inspired by the Wiwa and Wewa has a third type of inverse, which dialogue doesn't really have, I don't think.
00:02:42.479 --> 00:02:49.840
Maybe it's there for just like a few specific printers, which is the one where you invert it dyadically but you bind the other way.
00:02:50.000 --> 00:02:53.439
And we are called this contrast, I just took the uh the name from there.
00:02:53.599 --> 00:02:59.520
Uh and the other three are well the names are new, but the actual behavior not not really, I guess.
00:02:59.759 --> 00:03:02.159
So I remember the order once I could.
00:03:02.400 --> 00:03:06.080
And it's just is but well, just you know, to interrupt you in the middle of your explanation.
00:03:06.240 --> 00:03:11.439
So all of this is baked into the inverse modifier that we're looking at right now.
00:03:11.520 --> 00:03:12.080
Is that correct?
00:03:12.319 --> 00:03:12.560
Yes.
00:03:12.719 --> 00:03:15.919
It depends on how you call the derived function, yes.
00:03:16.080 --> 00:03:20.479
So this first one is just the monantical, so you do f inverse y, you get the uninverse.
00:03:20.960 --> 00:03:22.879
Then if you pass the left argument, you get anti.
00:03:23.439 --> 00:03:29.199
And then if you commute the function before inverting it, you get like a commuted version of the contrary inverse.
00:03:29.280 --> 00:03:32.319
So if you commute it again, you get the the contra inverse.
00:03:32.560 --> 00:03:37.840
The this inverse is like splitting a thing in half, so you know, like in we wa, I think I didn't share it.
00:03:38.000 --> 00:03:46.639
If you have minus three and then you do unmultiply it, uh it splits into like the sign and uh the absolute value.
00:03:46.879 --> 00:03:54.479
I don't think it has a name in we wa, so I call it a this inverse, which is like uh splitting apart into two things, and you get it with reduction.
00:03:54.639 --> 00:04:07.280
So if you invert a reduction, you get a pair, just like because of course if you get have a pair or like a two cell list and you reduce it, you can apply a diary function to the two halves without like splitting apart or something like that.
00:04:07.520 --> 00:04:14.240
So yes, it's the inverse of that, and then there is the inverse which is like splitting a thing into two of the same parts.
00:04:14.560 --> 00:04:26.879
I actually don't remember which functions have this, but maybe it's like halves that if you have like if you do like the the by inverse of addition, you get the half or something and remember.
00:04:27.120 --> 00:04:32.160
Uh and then the last inverse is like the the prime factorization in wea.
00:04:32.879 --> 00:04:39.360
If you in we will if you undo reduction, you get this a list of the prime factor of the prime factors of a number.
00:04:39.920 --> 00:04:46.639
And because I already had used reduction for the other thing, of course, I can disambiguate by anything other than the arity.
00:04:46.879 --> 00:04:57.519
So if you call the inverse of a reduction diadically, instead of getting the pair, it's treated like the inverse of a fold, so it does the the wewa thing.
00:04:57.680 --> 00:05:01.199
So if, for example, for the prime factory, you would pass the left argument of one.
00:05:01.680 --> 00:05:07.199
If you gave it something else, you would divide the number first, but it's kind of like a side effect of how it's implemented.
00:05:07.600 --> 00:05:08.800
And I think that's everything.
00:05:08.879 --> 00:05:14.879
There's also like the contextual under, but it just uses the inverses on the way forward and on the way back.
00:05:15.120 --> 00:05:18.000
And this is definitely the biggest thing, I think.
00:05:18.399 --> 00:05:23.439
Um bit hard to remember like what I already used and what I didn't, because it's been like a year or something.
00:05:23.759 --> 00:05:24.879
It all blends together.
00:05:25.120 --> 00:05:28.480
Yeah, this is definitely the most important bit for sure.
00:05:28.800 --> 00:05:39.279
So it I mean, uh probably not, but I know Weewa has a page that lists a lot of the I don't know what you call them, idioms, like the uninverse idioms.
00:05:39.360 --> 00:05:41.439
Do you does Tiny Apple have any of this stuff?
00:05:41.600 --> 00:05:43.600
Because it is very curious.
00:05:43.920 --> 00:05:49.920
I didn't realize that it kind of is in so basically like a lot this stuff is kind of implicit in Weewa.
00:05:50.319 --> 00:05:58.240
If you have the unmodifier, you can apply that to, I guess, some function, some expression, and you're kind of splitting that.
00:05:58.319 --> 00:06:07.040
So in the case where you're using un on a reduction, you're calling that I can't remember if it was was it the anna, or was that the by inverse?
00:06:07.600 --> 00:06:09.839
Bye is the inverse of the selfie.
00:06:10.160 --> 00:06:10.879
Of the selfie.
00:06:11.120 --> 00:06:12.079
Monadic selfie.
00:06:12.399 --> 00:06:14.000
And so dis inverse and inverse.
00:06:17.199 --> 00:06:17.360
Right.
00:06:17.439 --> 00:06:24.720
So yeah, it's it's dis and anna are on reductions, and the question is whether you call it monadically or dyadically.
00:06:25.279 --> 00:06:28.639
And yeah, so this stuff is very curious.
00:06:28.879 --> 00:06:40.720
And I guess you're baking this all into a single primitive, but I know that we wa has un, it has anti, and so I guess Yeah, it's just because of the fixed arity, basically.
00:06:41.199 --> 00:06:43.040
It's because of the fixed airity.
00:06:43.279 --> 00:06:43.920
Oh, I see.
00:06:44.079 --> 00:06:55.199
So all of what Weewa provides via un and anti, you've baked into the inverse primitive in Tiny Apple because Tiny Apple has ambivalence.
00:06:55.680 --> 00:06:56.000
Yes.
00:06:56.720 --> 00:06:57.680
Interesting.
00:06:58.240 --> 00:06:58.720
Interesting.
00:06:58.879 --> 00:07:01.439
I'm gonna have to play around with this and and see.
00:07:01.759 --> 00:07:08.639
So does Tiny Apple I I assume it's borrowed some of the Wiwa idioms like the prime factors and stuff?
00:07:08.720 --> 00:07:09.600
Or yeah.
00:07:09.759 --> 00:07:13.600
I don't have a lot of them, but mm most of the ones they have come from there, yeah.
00:07:14.079 --> 00:07:14.639
Come from Weewa.
00:07:19.759 --> 00:07:21.120
Can I get the prime factors yet?
00:07:21.920 --> 00:07:23.120
Oh no, it doesn't work.
00:07:23.199 --> 00:07:25.920
Uh I'm gonna try the other one called a rebox.
00:07:26.959 --> 00:07:28.079
I've heard of it.
00:07:30.800 --> 00:07:31.279
I forgot.
00:07:31.519 --> 00:07:32.959
It's uh control up.
00:07:33.680 --> 00:07:33.920
Okay.
00:07:34.160 --> 00:07:34.480
Yeah.
00:07:34.879 --> 00:07:38.879
Uh one multiply reduce inverse 24.
00:07:39.439 --> 00:07:40.000
There we go.
00:07:40.399 --> 00:07:41.920
So yeah, I also have this one for me.
00:07:42.319 --> 00:07:49.040
And so if the only one that feels a little bit like hacky is this one, the um the this inverse, because like I want both of them, right?
00:07:49.120 --> 00:07:59.120
If I do just one without the one before, I get the sign and magnitude, and I want both, but I can't really do anything to distinguish them other than type the sorry the IRT as we call them.
00:07:59.360 --> 00:08:07.360
So one of them has to take two arguments, and I can't really think of a way to get this one to take two arguments, but the prime factorization it just divides the number first.
00:08:07.439 --> 00:08:17.360
So if I write two, it's got one less two, if I write three, it's got one less three, it's not great, but uh, the alternative was having two primitives, which you know uh not things like that.
00:08:17.439 --> 00:08:17.759
Yeah.
00:08:18.160 --> 00:08:18.399
Right.
00:08:18.560 --> 00:08:23.279
Oh, so you prefer to keep it just all basically in the single inverse primitive, is what you're saying.
00:08:23.519 --> 00:08:23.839
Yeah.
00:08:24.079 --> 00:08:24.240
Yeah.
00:08:24.399 --> 00:08:44.240
I started thinking, I mean, this is kind of like a tangential thought, but I was just thinking about this yesterday when I was working on the last touches to the YouTube video I put out, and it was actually from the comment that you left on that YouTube video where you mentioned that the name of the was it mixed glyph was like um split glyph.
00:08:44.559 --> 00:09:14.480
It it had picked up the key value pairs, and I actually intentionally left that in and forgot to make a comment about it in the video because it it made me realize that it we don't actually, or at least I haven't seen any papers or heard conversations of people talking about it, but in C, or I guess in a bunch of languages, there is a type of polymorphism called ad hoc polymorphism, but it's typically referred to as function overloading.
00:09:14.639 --> 00:09:23.919
And you can function overload on the number of arguments, on the type of the arguments, and really like this is a it's a key feature of APLs.
00:09:24.080 --> 00:09:36.799
Like the the overloading, like what we call ambivalence is just ad hoc polymorphism in other languages like C, in that we've assigned two different meanings to the airity of the function.
00:09:36.960 --> 00:09:41.039
And then on top of that, and I I you can correct me because you probably know more about this stuff.
00:09:41.120 --> 00:09:54.480
You've studied these languages more than I have, that I think K has this, and now maybe Tiny Apple with dictionaries, is that when you're overloading on type, that's like another form of ad hoc polymorphism.
00:09:54.559 --> 00:10:14.000
So there's kind of like there's type ad hoc polymorphism, and then there's airity ad hoc polymorphism, where whenever you're overloading a glyph to have a different behavior, and so uh correct me if I'm wrong, is that what the key value pairs is when when you use the drop glyph on a dictionary, it has this custom behavior, correct?
00:10:14.159 --> 00:10:15.120
Yeah, yeah.
00:10:15.519 --> 00:10:21.279
The idea with all of the preemptives that take dictionaries that they have to be like pretty similar to the ones for arrays.
00:10:21.679 --> 00:10:29.679
So in some cases they just get grouped into the same documentation thing, but in some things they feel like it's just close enough, but there's enough for a difference that they want to split them.
00:10:29.759 --> 00:10:34.320
And yeah, there's not really a great way in like uh metadata to specify what the type is.
00:10:34.559 --> 00:10:38.080
There's a lot of different ways you can overload things in APL.
00:10:38.320 --> 00:10:45.360
I'm trying to think of a good example, but you know, like in BQN you can add the numbers and characters and arguably that's already an overload by type.
00:10:45.600 --> 00:10:48.559
There's also we will have overloads by rank, for example.
00:10:48.639 --> 00:10:51.919
Well uh uh dialogue has overloads by rank, let's see.
00:10:52.240 --> 00:11:00.960
If I do like IOTA 5, I get a normal list, but if I do iota 2, 3, I get a box array, that's overloading by rank essentially.
00:11:01.200 --> 00:11:04.879
You know, kind of because it's yeah, so that's that's rank polymorphism, yeah.
00:11:05.200 --> 00:11:05.440
Yeah.
00:11:06.559 --> 00:11:13.120
Rank polyformi is usually is about like being independent of rank, like you can add any arrays or things like that.
00:11:13.279 --> 00:11:17.200
This is actually like changing behavior based on the rank, which is slightly different.
00:11:17.360 --> 00:11:19.200
Um has his own wear.
00:11:19.519 --> 00:11:19.919
That's true.
00:11:20.240 --> 00:11:25.360
If I do well, so that actually that actually means that there's kind of two different types of rank polymorphism.
00:11:25.440 --> 00:11:33.600
Like the the and now the what is it, the sibling of ad hoc polymorphism is parametric polymorphism, which is like you know, one primitive same behavior.
00:11:33.759 --> 00:11:40.320
So kind of like you you have rank you have parametric rank polymorphism, and then you also have ad hoc rank polymorphism.
00:11:40.399 --> 00:11:45.200
So that the iota was an example of ad hoc rank polymorphism.
00:11:45.360 --> 00:11:57.440
But in anyways, it's it's made me think that there's actually like a bajillion types of polymorphism inside these array languages, but we only refer to them as like rank polymorphic, but really it's it's rank polymorphic and ad hoc polymorphic.
00:11:57.519 --> 00:12:01.600
And within ad hoc polymorphic, there's like there's type, there's airity.
00:12:02.080 --> 00:12:06.240
There's a lot of types of polymorphism in these array languages, and no one's talking about it.
00:12:06.320 --> 00:12:07.360
What's going on here?
00:12:08.480 --> 00:12:11.919
Yeah, I guess it's uh it feels more like a consequence, I guess.
00:12:12.080 --> 00:12:13.759
Sounds really like a key feature.
00:12:13.919 --> 00:12:17.039
But then on the other hand, you can't really do it for your own functions.
00:12:17.120 --> 00:12:20.000
You have to like you know do manual guards and whatever.
00:12:20.159 --> 00:12:28.799
You can't like really say, Oh, I want to do this based on the rank, and this is the other rank, you just have to write a define and say if the rank is due to this, and why is this the other?
00:12:29.039 --> 00:12:34.080
I can't take I can't define f on rank one, f on rank two as different things.
00:12:34.480 --> 00:12:37.279
Yeah, that is I mean, what is that?
00:12:37.440 --> 00:12:50.159
I guess it's unfortunate that the language primitives have all that rich functionality, but you can't get it as I mean technically some languages, I think including does tiny apple have obverse or an equivalent of it?
00:12:50.559 --> 00:12:51.279
No, not yet.
00:12:51.519 --> 00:12:52.159
Okay, not yet.
00:12:52.240 --> 00:12:55.440
But J has it and I think WeWa has it, right?
00:12:55.679 --> 00:12:57.600
Yeah, the one for setting inverses.
00:12:57.840 --> 00:12:58.399
Yeah, yeah.
00:12:58.559 --> 00:12:58.960
Yeah, yeah.
00:12:59.600 --> 00:13:06.240
And I guess does that mean if Tiny Apple adds obverse, you have to add a very complicated obverse that enables you to uh to define it?
00:13:06.720 --> 00:13:08.799
Yeah, is that the right argument is a dictionary.
00:13:09.039 --> 00:13:10.480
Uh right operand, sorry.
00:13:10.720 --> 00:13:24.720
So you say, well, you can just say the normal inverse and you test buffs function, that's fine, but if you want to say all of the inverses, you you give it to that dictionary, so essentially each inverse gets a different number uh or a graph, I'm not really sure.
00:13:24.879 --> 00:13:34.960
And you just do key by plus based, and that's like uh you could do if I have my function f and I want to set the inverse, I can do let me pick a random grip like that.
00:13:35.039 --> 00:13:35.360
I don't know.
00:13:35.440 --> 00:13:42.000
Let's say this is obverse, and I do like a dictionary, and I say the normal inverse is or maybe like that.
00:13:42.080 --> 00:13:54.240
The normal inverse is I don't know, plus, and then the the contra inverse is gonna be minus and then reduce and the annual and this together are going to be times, whatever.
00:13:54.320 --> 00:13:55.360
So like something like this.
00:13:55.440 --> 00:13:55.519
Right.
00:13:55.759 --> 00:14:00.240
And of course, each one of these means two things because you can still overload by RT.
00:14:00.399 --> 00:14:04.559
If you want to do different things within the arc, you can use valences, which is like this.
00:14:04.799 --> 00:14:06.639
So you can say yeah.
00:14:06.879 --> 00:14:11.120
So like the complete uh way to say all sticks would be something like that.
00:14:11.919 --> 00:14:12.399
Very neat.
00:14:12.559 --> 00:14:15.279
So this is uh hypothetical, it doesn't exist at the moment, but yeah.
00:14:17.759 --> 00:14:31.600
If I can't come no, the list is random, but if I can't come up in anything about it like this, it's kind of a bit like maybe unwieldy, I guess, but there's a lot of things that you can set, and it's not not really an easy way for you to be able to specify them.
00:14:32.159 --> 00:14:34.080
Alright, so we have a number of questions in the chat.
00:14:34.159 --> 00:14:43.679
I think the most recent one is how can you distinguish between a single primitive with various modes and a single glyph being shared by multiple primitives?
00:14:45.360 --> 00:14:47.200
I think it's just subjective, I guess.
00:14:47.759 --> 00:14:51.519
There's some things that are obviously very far away, so it just feels like an overload.
00:14:51.840 --> 00:14:57.279
Some things are feel really close, so just different modes, but you know, the boundary is definitely arbitrary.
00:14:57.600 --> 00:14:59.759
So like is just an overload or not?
00:15:00.320 --> 00:15:04.639
I I wouldn't say it is, but you know, you could definitely argue that it's an overload.
00:15:05.360 --> 00:15:05.919
Right.
00:15:06.720 --> 00:15:16.960
I mean do you have a so yeah, a single primitive with various modes versus a single glyph being shared by multiple actually I don't understand the the latter part.
00:15:17.120 --> 00:15:21.360
A single glyph being shared by multiple quote unquote primitives.
00:15:21.759 --> 00:15:24.240
Like single glyph multiple functions, I think.
00:15:24.639 --> 00:15:27.919
And does that mean yeah, you're overloading on you're overloading on something?
00:15:29.440 --> 00:15:29.919
Yeah.
00:15:30.240 --> 00:15:32.799
Yeah, I guess this is kind of the and that's what I've been thinking.
00:15:32.879 --> 00:15:37.679
I I mean I have to add K to array box so that I can play around with it more.
00:15:37.840 --> 00:15:48.879
But that was the realization when we were talking to Jacob about fixed APL that it actually has a lot more in common with K because K does a lot of overloading on types.
00:15:49.200 --> 00:15:53.840
And it also makes me think too, and I maybe this is a question that you can you can answer, maybe maybe you don't know.
00:15:54.080 --> 00:16:05.200
Does like in in building that comparison mode where you're showing the table of translations and then you have like the nested, like how does it, what's the expression on nested?
00:16:07.120 --> 00:16:08.000
What does K have?
00:16:08.080 --> 00:16:12.559
Like K because K doesn't even fully have like a fully ranked arrays, right?
00:16:12.639 --> 00:16:17.600
Like they've got their do they call them dictionaries or do they call them tables?
00:16:18.159 --> 00:16:20.320
I think well it depends on the dialect.
00:16:20.399 --> 00:16:22.720
I think there's a lot of different K's with different things.
00:16:22.799 --> 00:16:24.960
Some of them I think don't have dictionaries at all.
00:16:25.039 --> 00:16:30.879
And I'm pretty sure tables and dictionaries are slightly different, but I'm not really the right person to ask about KMS.
00:16:31.200 --> 00:16:33.679
Gotta bring on John Ernest so he can answer in the future.
00:16:33.840 --> 00:16:38.240
But the the point being is that K and Q don't really have like the same model.
00:16:38.399 --> 00:16:42.799
And also Weewa even like I don't actually fully understand what Weewa has.
00:16:42.879 --> 00:16:46.000
Does Weewa have the concept of nested arrays?
00:16:46.240 --> 00:16:52.960
Because a lot of the times when I'm typing things, it'll just automatically put it like in matrix form if it recognizes that the shapes align.
00:16:53.200 --> 00:16:54.639
Oh, we always the same as J.
00:16:54.960 --> 00:16:56.559
Weewa's the same as J.
00:16:56.799 --> 00:16:57.120
Yeah.
00:16:57.279 --> 00:17:01.679
The main difference is that if you have like a box, you can do arithmetic on it.
00:17:02.559 --> 00:17:07.759
If I do if I have a box one, two, three, like this, I can do three plus.
00:17:09.599 --> 00:17:12.000
You can do a bit and this works, and in J it doesn't.
00:17:12.319 --> 00:17:13.440
Uh I'm just gonna do it here.
00:17:14.480 --> 00:17:18.480
If I do three plus box three, that's not gonna work.
00:17:18.799 --> 00:17:21.200
Uh but the actual model is the same mostly.
00:17:22.000 --> 00:17:24.640
Yeah, it doesn't really big difference other than that.
00:17:24.960 --> 00:17:26.559
But yeah, it's definitely got rank.
00:17:26.880 --> 00:17:33.039
Maybe it's you mean that like the the brackets like this already uh automatically mixed up like this.
00:17:33.599 --> 00:17:34.319
Yeah, exactly.
00:17:34.400 --> 00:17:46.880
Like a lot of times when I expect to see like the equivalent of like a nested array and j or dialogue APL or even tiny apple, it formats it like this, and then I you have to switch to the braces.
00:17:47.119 --> 00:17:53.359
And I am not a I'm not a WeWind expert enough to know like what's the what's the difference here?
00:17:53.519 --> 00:18:00.079
And well it's kind of like a ray notation dialogue, and you can't do it in tiny apple because uh I know it by the bra.
00:18:00.400 --> 00:18:01.440
Actually I can do it here now.
00:18:01.920 --> 00:18:10.319
So if I do two one, two, three like this, it's nested, and like this it's a matrix.
00:18:10.480 --> 00:18:13.119
It's the same thing except instead of the parents you use bases.
00:18:13.440 --> 00:18:16.640
Uh of course the model is like the different, so it's not the exact same thing.
00:18:16.720 --> 00:18:39.279
Like I can do this, one, two, and I get two boxes, but because the dialogue is nested, if I do just one and then two, I just get normal what oh oh sorry, like if I do this, it just gets matches one, two, it's the same array, of course, because it's uh it's nested, so this one doesn't get boxed or like if it did, it wouldn't change anything.
00:18:39.440 --> 00:18:43.440
Uh of course in Wii Wide that's different because you can box the scalars.
00:18:43.759 --> 00:18:51.680
Yeah, we I mean I still need we need to have another full episode on a ray cast on the different flat boxed, you know, whatever the different models are.
00:18:51.759 --> 00:19:03.759
We've talked about it multiple times, and I always get like 75% to a full understanding, and then like two episodes later, I've forgotten my understanding of the different models because it's it's very subtle the differences.
00:19:03.920 --> 00:19:08.319
Like for the most part, you know, pervasive or scalar primitives, they all work the same.
00:19:08.559 --> 00:19:13.039
And in like the 90% of cases, all the models are roughly working the same way.
00:19:13.119 --> 00:19:17.759
It's only when you get to the corner cases of, yeah, like boxing scalars or when you do some kind of reduction.
00:19:17.839 --> 00:19:20.400
And that was that was kind of when we were talking to Jacob as well.
00:19:20.480 --> 00:19:26.880
You know, he had the different types of folds or whatever of whether it's gonna unbox and and his choices, anyways.
00:19:26.960 --> 00:19:28.960
We've got a we've got a lot of comments in the chat too.
00:19:29.119 --> 00:19:36.000
Adam saying uh in K-land a table and dictionary are transposes or flips of each other, and that makes sense.
00:19:36.079 --> 00:19:42.000
We gotta, like I said, I gotta add I gotta add, I think the choice is gonna be NGNK is the one that's gonna get added.
00:19:42.160 --> 00:19:44.160
And we also we missed at the very beginning.
00:19:44.240 --> 00:19:48.240
Um Adam asked, Does it handle all compositions of primitives too?
00:19:48.400 --> 00:19:50.720
And I think that was a question about the inverse.
00:19:51.039 --> 00:19:58.000
Yeah, yes, it does the yeah, it does uh company inverse, but it doesn't do force yet.
00:19:58.160 --> 00:20:13.200
But you can use I don't know, like what's a function that could inverse, maybe I don't know, square root and then uh square root and then maybe I can't think of any function that has an inverse.
00:20:13.440 --> 00:20:16.160
So it's doing a negation, which is the self-inverse, of course.
00:20:16.480 --> 00:20:20.240
And if I do this on minus two, I get two.
00:20:20.640 --> 00:20:24.240
And if I invert s and two, I'm gonna get minus four.
00:20:24.319 --> 00:20:34.079
Yeah, so uh inverting compositions works, but you can't undo forks because that's I don't think you can like forks at velocity, I guess you can't really do that cleanly.
00:20:34.559 --> 00:20:41.759
And there's also like non-numerical solutions, like I think dialogue has some like numerical solver in case it can't invert it to the function itself.
00:20:42.000 --> 00:20:48.400
But I don't have that like if I can try to invert any thing in define just doesn't work.
00:20:48.799 --> 00:20:49.119
Right.
00:20:49.279 --> 00:20:50.720
Okay, that makes sense.
00:20:51.039 --> 00:20:52.960
All right, so that is I mean, that's inverses.
00:20:53.039 --> 00:20:53.839
Are there is there more to say?
00:20:54.000 --> 00:21:06.079
I gotta like I said, I have to play around and uh I I I find the idea of inverses very attractive because I mean, as you know, I I like the non I don't know.
00:21:06.160 --> 00:21:09.039
I I honestly I'm of two minds of which model I prefer.
00:21:09.200 --> 00:21:23.680
Uh I love probably and and this I I forgot that uh we were supposed to start off the top saying I th you know I I flip I flop over what's my favorite array language, but I think Tiny Apple is my favorite array language, at least of the day of the last few weeks.
00:21:23.920 --> 00:21:37.839
And it's and at one point I thought maybe it was WeWa, but mostly the thing that I love about WeWa is how great the like tooling, you know, it kind of feels like if you're going from APL to Weewa, it feels like you're going from C to Rust.
00:21:38.000 --> 00:21:41.359
Like it has like you know, you write Weewa test, Weewa run.
00:21:41.519 --> 00:21:46.079
It's got, you know, in its Weewa pad, you can do asserts and and run like unit tests.
00:21:46.240 --> 00:21:47.359
It's got a lot of nice stuff.
00:21:47.440 --> 00:21:50.960
It's got like the the formatting and the alignment of uh comments and whatnot.
00:21:51.119 --> 00:21:53.119
So that is really what I love about WiWA.
00:21:53.279 --> 00:21:59.759
It's not some and it also does have a lot of really nice like the design and the thoughtfulness that Kai has put into some of the prints.
00:22:00.720 --> 00:22:08.960
Like when I found out that one of the overloads of tuples was the equivalent of prefixes in J, I thought that was just really, really nice.
00:22:09.119 --> 00:22:20.000
And uh and and I've again and again I come across, you know, I think Kai and Wewa was the first to have the stencil minus for basically your two wise reductions.
00:22:20.240 --> 00:22:23.119
And I know that Tiny Apple, I'm not sure if you want to show that.
00:22:23.440 --> 00:22:23.920
Yeah, sure.
00:22:24.079 --> 00:22:27.119
That because I think that's new since the last time we talked.
00:22:27.279 --> 00:22:30.319
You baked that into the stencil operator.
00:22:30.480 --> 00:22:42.559
So you you have both n-wise reductions, but then you also have specifically for the you know the two wise case, and this is something that I've always wanted in all of the array languages.
00:22:42.640 --> 00:22:57.359
It breaks my heart in BQN that I I I guess I heard Adam said the other day that Marshall made a choice that structural things are functions, and so things like windows and prefixes he puts into functions that that do the modifications.
00:22:57.519 --> 00:22:58.400
I never realized that.
00:22:58.480 --> 00:23:02.240
You know, Adam made it as like a throwaway comment, and I've been thinking about it ever since.
00:23:02.400 --> 00:23:03.279
Anyways, oh yeah.
00:23:17.599 --> 00:23:18.079
Yeah, yeah.
00:23:18.160 --> 00:23:22.960
A lot of thought, and he's been very principled about the way that he designed BQN.
00:23:23.119 --> 00:23:25.519
And so, anyways, yes, this is fantastic.
00:23:25.680 --> 00:23:28.559
But so the things that I love about Weewa are more its tooling.
00:23:28.720 --> 00:23:35.119
And when we were talking to Jacob, he mentioned that he really liked the infix nature of APLs.
00:23:35.200 --> 00:23:36.880
And I realized that like that is so true.
00:23:37.039 --> 00:23:44.319
Like, probably my least favorite thing about Weewa is the prefix notation for binary operations.
00:23:44.480 --> 00:23:54.799
I really, and and maybe it is just because I started with APL, and so you grow to like what you first know, whereas someone else that starts with WeWa might prefer that and then think that APL is weird.
00:23:54.960 --> 00:24:00.960
Whatever the reason, I do tend to prefer the kind of symmetry of of forks and APL.
00:24:01.119 --> 00:24:06.720
And and then Tiny APL, the thing, the the tiny apple, the thing that I really love is it's got all the it's got all the primitives.
00:24:06.799 --> 00:24:16.480
Everything you want, like you know, in the last video I made, the fact that you've got last, the fact that you've got both the you know, the BQN first and the first cell and both equivalents, it's just very nice.
00:24:16.640 --> 00:24:26.480
And you know, you kind of you've joked in the past that like, oh, I'm trying to put everything from all the array languages, but that's actually kind of like it's a feature, you know, like and people say, Oh, how many primitives is too many?
00:24:26.640 --> 00:24:28.400
I don't think it's that, it's too many, you know?
00:24:28.640 --> 00:24:38.319
Anyways, and there's still things about, I mean, we were chatting, I can't remember if it was via Discord or it was on a YouTube comment section, but I uh I think it was in Discord, the Weewa Discord.
00:24:38.480 --> 00:24:46.559
I asked, would you ever consider doing something with the empty syntactic space outside of the fork or the banana brackets, whatever you want to call them?
00:24:46.720 --> 00:24:48.160
And you said, uh maybe.
00:24:48.240 --> 00:24:50.240
I'll think about it or see how hard it is.
00:24:50.319 --> 00:24:54.400
And I I think if I recall, you said that just parsing it is is a bit tricky.
00:24:54.559 --> 00:24:54.799
Yeah.
00:24:54.960 --> 00:24:59.359
But I think because my parser is a little bit like I'm not sure I fully understand how it works.
00:24:59.599 --> 00:25:04.160
Do you want to say I think I had a fever when I was writing and I never touched it later.
00:25:04.240 --> 00:25:05.279
So I'm not sure.
00:25:05.519 --> 00:25:07.680
The parser that you wrote, you're not sure you understand.
00:25:08.240 --> 00:25:14.480
Yeah, I add new things every time, but the old core and not even try touching, I don't think, for a while.
00:25:14.799 --> 00:25:15.200
I see.
00:25:15.359 --> 00:25:36.000
Yeah, because it would be very, I mean, when I was solving that problem, the so the problem was the basically you're given pairs of characters if you haven't seen the YouTube video, and you want to extract the first character from each pair and the last character from each pair, and then do a without to basically remove any of the uh characters that show up in the first.
00:25:36.240 --> 00:25:38.319
Yeah, I guess we can we can write up an example.
00:25:38.720 --> 00:25:41.039
Do you remember a good example already?
00:25:41.839 --> 00:25:46.799
This works because basically it'll remove ABC from B C D, so the answer will be D, hopefully.
00:25:48.240 --> 00:25:50.240
Oh yeah, this is not that I forgot.
00:25:50.400 --> 00:25:51.519
Um like this.
00:25:51.759 --> 00:25:52.880
So yeah, the answer here is D.
00:25:52.960 --> 00:25:57.920
So you if you and if you use pair for a second with to replace without, it'll it'll show.
00:25:58.000 --> 00:26:07.359
So you've got your firsts, your lasts, or I guess technically it's lasts and then firsts, and then you want to get rid of from the lasts the firsts.
00:26:07.440 --> 00:26:12.799
You know, the problem says it has something to do with whatever destinations and whatnot, but the this is the essence of it.
00:26:13.119 --> 00:26:21.279
And I thought that cap would have the shortest solution because if if you do the alternative.
00:26:21.359 --> 00:26:28.960
So the alternative way to solve this problem is to transpose and then do a so yeah, let's let's see if we can do this slide.
00:26:29.039 --> 00:26:36.640
So yeah, if you transpose and then you have to do a uh column-wise reverse.
00:26:37.759 --> 00:26:38.160
Oh yeah.
00:26:38.319 --> 00:26:41.440
So but now in order to make this tacit though, so I think that was correct.
00:26:41.759 --> 00:26:44.240
Oh, I found can I not undo a memory books?
00:26:44.559 --> 00:26:44.960
Not really.
00:26:45.039 --> 00:26:50.079
If you go control shift up, it'll bring you back your last expression, I believe.
00:26:50.960 --> 00:26:53.359
Oh yeah, but it doesn't actually have control Z.
00:26:53.920 --> 00:26:57.039
Yeah, so it's gonna make sense.
00:26:57.279 --> 00:26:58.880
Yeah, I think this works.
00:26:58.960 --> 00:26:59.039
Yeah.
00:26:59.359 --> 00:27:00.240
So yeah, this works.
00:27:00.400 --> 00:27:10.480
And so what I was hoping for, and this is actually, we can talk about this because I don't actually fully understand why certain languages, the without reduction doesn't work.
00:27:10.720 --> 00:27:16.640
And but the the thing I was thinking is that cap has their two-train only and left bound functions.
00:27:16.880 --> 00:27:30.400
And so I thought as long as it's got uh trans it as long as it has the mix, the split, and the transpose, you should be able to do this in cap, but it doesn't have, I believe, the one of them.
00:27:30.640 --> 00:27:34.240
And then it also the I don't think the without reduction works.
00:27:34.400 --> 00:27:36.160
So yeah, let's see how this falls apart.
00:27:36.319 --> 00:27:38.400
So oh yeah, sorry.
00:27:38.960 --> 00:27:45.279
Well, I mean I should be saying sorry, the uh array box should be converting that correctly, but it's uh failing.
00:27:45.839 --> 00:27:47.599
So this is not correct.
00:27:47.759 --> 00:27:53.839
So what I mean Oh sorry, this has to be like this, yeah, and then this doesn't work.
00:27:54.319 --> 00:27:59.279
Oh, it's because it it does each choice and okay, this is gonna be uh actually.
00:27:59.599 --> 00:28:00.720
So why so this is the thing.
00:28:00.799 --> 00:28:06.559
I don't actually uh my understanding is that some of the I mean if if you do do they have reduced first?
00:28:06.799 --> 00:28:20.480
Yeah, some of the reduced first is the reduced the reduce firsts, hard to pronounce, is not doing the like they're not doing without on like a row wise basis.
00:28:20.720 --> 00:28:35.279
So you should be like basically applying a binary operation, which is the without reduction, but for so some of the array languages, when you do a without reduction, it does it on like a element-wise as if it were.
00:28:38.720 --> 00:28:45.039
So if I want to get the same result, I have to write each here and I think that's gonna work.
00:28:48.319 --> 00:28:49.839
And it has to be a reduction.
00:28:50.160 --> 00:28:51.119
So this is the same result.
00:28:51.599 --> 00:29:00.319
So in cap and like dialogue and most nested APLs, the each time you do a reduction, there's an implicit each added to the function that you give it.
00:29:00.799 --> 00:29:05.279
Of course, if you only have flat arrays, it doesn't change anything and like pervasive functions here.
00:29:05.680 --> 00:29:11.359
So like it's a choice that you can make going from like no nesting to having nested arrays.
00:29:11.599 --> 00:29:17.119
Like if in J, for example, you don't need this, but I have no idea how you do it.
00:29:17.920 --> 00:29:23.039
Like this, and then transpose and like this, it's just that.
00:29:23.359 --> 00:29:26.799
You'll have to get rid of the uh semicolons.
00:29:27.200 --> 00:29:28.640
And then I use this.
00:29:29.200 --> 00:29:29.599
Yes.
00:29:29.839 --> 00:29:31.039
So this works.
00:29:31.279 --> 00:29:33.039
This works in J because there is no each.
00:29:33.200 --> 00:29:36.799
If I do like this or something, you're gonna get the same result.
00:29:37.039 --> 00:29:37.359
Yeah.
00:29:37.599 --> 00:29:41.119
So some languages add an each to the function and some don't.
00:29:41.359 --> 00:29:44.240
Usually suck languages don't and nested languages do.
00:29:44.400 --> 00:29:46.559
I don't really like nesting like as a concept.
00:29:46.880 --> 00:29:54.160
Yeah, I mean I put it nested because when I started making it I knew about dialogue essentially, so you know that's what I was used to.
00:29:54.480 --> 00:30:00.400
But I'm not sure I would make the same choice, but in any ways, I don't like the like nesting it as a concept.
00:30:00.480 --> 00:30:02.079
I like to keep things flat yet.
00:30:02.319 --> 00:30:06.400
So I didn't feel like uh adding the implicit each was a good idea.
00:30:06.799 --> 00:30:08.559
The same thing happens with like table.
00:30:10.319 --> 00:30:14.480
I have like I do.
00:30:18.799 --> 00:30:33.759
Yeah, it's a bit hard to read, but if I did this in cap it would be the I'm not sure how it's gonna be the there's like one left level of nasty, I'm not sure that's clear, but yeah, so here there's also an implicit each.
00:30:34.640 --> 00:30:38.720
Like if I wrote the of course if I do that, there's gonna be another each.
00:30:38.880 --> 00:30:40.559
We don't think there's anything in this case.
00:30:40.799 --> 00:30:41.680
Oh no, yeah, it does.
00:30:41.839 --> 00:30:54.400
So I'm not really sure, but so yeah, there's some functions that have an each sometimes, which is implicit, and I removed all of those, so it's like closer to J and WiY and languages like that.
00:30:54.480 --> 00:31:00.319
So if it works there, it's more likely to work in Tiny Apple rather than if it works in Battery PL, I think.
00:31:00.640 --> 00:31:13.759
And so is this because Adam in the chat's saying that's because of how first access reduction is defined along the vectors made from the columns versus the major cells, whereas in the case of a matrix, major cells are the rows.
00:31:14.000 --> 00:31:24.640
And that's typically how I think of like the when I see a uh reduce first, I think of it operating on the rows.
00:31:24.720 --> 00:31:30.319
Like even though when you're adding those, it is essentially the same thing as adding up the columns.
00:31:30.559 --> 00:31:35.519
Really, it's like you're putting pluses in between the rows, but that's not how all arrays work.
00:31:35.599 --> 00:31:39.279
So you're saying J and Wewa don't work that way.
00:31:39.599 --> 00:31:44.720
So the J way, which is also my way, is to just take this cell and this cell.
00:31:44.960 --> 00:31:47.599
Well, mine is left right, but it doesn't really matter in this case.
00:31:47.759 --> 00:31:52.400
So take this one and this one and add them together, and then take this one and add good result.
00:31:52.799 --> 00:31:56.480
Uh the dialogue way is to add these three, it's gonna work.
00:31:56.720 --> 00:31:58.559
These three and you see my curve?
00:31:58.640 --> 00:31:59.039
I'm not sure.
00:31:59.119 --> 00:31:59.519
Yeah, I can't.
00:31:59.680 --> 00:32:03.200
And this three and this three, and then put them in the in a vector.
00:32:03.359 --> 00:32:14.720
So it's the same thing for flat arrays, it's always the same for flat, but if you go into next arrays, it's gonna act different because of the different way that nesting would be the case, I guess.
00:32:15.920 --> 00:32:19.920
Yeah, so like if you put them into a low-rank array, you're gonna lose some nesting something.
00:32:20.079 --> 00:32:22.480
So yeah, the fact is the same as having implicit.
00:32:22.720 --> 00:32:27.279
I explained it like that because if you want the behavior, you add an each in tiny apple.
00:32:27.519 --> 00:32:30.079
But yeah, there's definitely other ways of seeing it for sure.
00:32:30.400 --> 00:32:34.720
Yeah, it's kind of complicated, and I'm not sure either way is better than the other.
00:32:34.799 --> 00:32:37.279
It kind of depends on your goals, I guess.
00:32:37.680 --> 00:32:45.680
And so is this an inherently a flat versus nested versus base thing, or is this just an implementation definition?
00:32:46.640 --> 00:33:13.359
Well, I mean clearly it's not because uh Tynapple is nested and has this, but y I would say it's traditionally it's a split between flat and nested languages, but necessarily not like an idiot difference is just kind of like the the pervasiveness of arithmetic through nesting, which usually works in nested languages and usually it doesn't work in flat languages, but you know, we are as flattened still works, so it's just a design choice, I guess.
00:33:13.680 --> 00:33:14.000
Right.
00:33:14.240 --> 00:33:22.079
Yeah, I was very surprised because I think I was doing it first in Tiny Apple and I did the without reduction, and I was like, ooh, that's very nice.
00:33:22.240 --> 00:33:40.880
I had I don't think I've ever written a without reduction on a two-row array, and then I was so disappointed when I got to CAP because I was like, Cap has the tacit model that I that could lead to the shortest solution, but unfortunately it it didn't have it.
00:33:41.440 --> 00:33:41.839
Yeah.
00:33:42.160 --> 00:33:43.359
What are you trying to do here?
00:33:43.680 --> 00:33:49.920
I'm going to the the the the dictionary version of the my solution and try from memory.
00:33:50.160 --> 00:33:56.079
So there's this function that takes the exact format uh that uh the problem is and turns it into a dictionary.
00:33:56.640 --> 00:34:07.119
Now I have to I guess do the values, subtract the I think that first and it is essentially already a train.
00:34:08.079 --> 00:34:08.320
Yeah.
00:34:08.480 --> 00:34:12.320
So it's the same length, I think, but it's just uh slightly different approach.
00:34:12.400 --> 00:34:23.440
So instead of doing the the each and the first, you just group that into a dictionary first and then you do so last when you give it to dictionary, it gives you the values of the training and first gives you the the keys.
00:34:23.760 --> 00:34:26.400
So it's just another kind of overload, I guess.
00:34:26.800 --> 00:34:32.400
Is it I guess it's not possible to use nothing after the dictionary primitive?
00:34:32.719 --> 00:34:37.280
Because that's uh no, because you want to apply this on the result on this.
00:34:37.519 --> 00:34:38.960
So you can do like this if you want.
00:34:39.280 --> 00:34:48.719
I was I was just about to ask, do you have do you have a you know design philosophy that leads you to choose for the the cap fork versus the banana bracket fork?
00:34:48.960 --> 00:34:50.639
Oh, it's just what takes less parents.
00:34:50.800 --> 00:34:54.239
Um if I can do it without brackets, it's gonna oh sorry.
00:34:54.880 --> 00:35:04.880
If I can do it without brackets, it's gonna be I'm gonna use a cap thing, but if it's like maybe longer or one of the things is a kind of yeah.
00:35:05.199 --> 00:35:11.039
One of the things is a composite function, not just a primitive, then it's gonna be the banana bracket.
00:35:11.440 --> 00:35:13.679
It's mostly just what looks neater, I guess.
00:35:13.920 --> 00:35:14.239
Right.
00:35:14.400 --> 00:35:19.519
I guess so in the case before it kind of looks a little bit nicer because you don't have nested banana.
00:35:19.920 --> 00:35:21.920
Yeah, double train, yeah, it kind of looks mad.
00:35:22.320 --> 00:35:27.119
But then you can remove the other one, of course, and I do with one hand, but you can just put it on top here.
00:35:27.519 --> 00:35:28.400
This also works.
00:35:28.719 --> 00:35:31.679
Yeah, you can't see the same result, but it's the same thing.
00:35:31.920 --> 00:35:32.239
Interesting.
00:35:32.480 --> 00:35:35.519
I usually try to use trains as least as possible, I guess.
00:35:35.760 --> 00:35:45.679
If I can do it with combinators, I'm gonna use combinators, but I mean if if I have, of course, I'm just gonna use trains, but I think they're just a little bit less pretty than combinators.
00:35:46.320 --> 00:35:51.519
You're saying that in general, if you can avoid trains, the code ends up looking nicer.
00:35:51.840 --> 00:35:53.199
Yeah, in my opinion, yeah.
00:35:53.519 --> 00:35:55.920
This is prettier, I think, than the version with an advert.
00:35:56.400 --> 00:35:57.199
Yeah, that's true.
00:35:57.360 --> 00:36:01.360
Although I wonder if I if I syntax highlighted the brackets, if that would change my mind.
00:36:02.639 --> 00:36:03.199
Interesting.
00:36:03.360 --> 00:36:13.280
So there's oh yeah, so we so we did end up talking about flat versus nested and the fact that a without reduction, depending on the language, there's an implicit each.
00:36:13.440 --> 00:36:18.159
And so then I guess for the languages where there is an implicit each, what's the solution?
00:36:18.320 --> 00:36:23.679
You have to switch it to a nested array and then do the without reduction on that nested array?
00:36:24.000 --> 00:36:29.119
Yeah, I think if you split it first, you know, like do may your cells based on what you want to do, you think that's more or less.
00:36:29.519 --> 00:36:31.360
Um I do from here.
00:36:31.679 --> 00:36:38.400
So we have like I want to mix and then I want to transpose and again mix.
00:36:38.800 --> 00:36:39.119
There we go.
00:36:39.440 --> 00:36:41.599
So then I want to split it on the cells again.
00:36:41.760 --> 00:36:45.039
I could do split, but I don't think it's encapsulated as the other thing else.
00:36:45.280 --> 00:36:49.679
So I have to do enclose rank one, yeah.
00:36:51.519 --> 00:36:51.760
Okay.
00:36:52.079 --> 00:36:52.880
I think it works.
00:36:54.159 --> 00:36:55.840
Yeah, because it's a matrix, I guess.
00:36:56.159 --> 00:36:58.960
And then you just do the reduction and it works.
00:36:59.119 --> 00:36:59.360
Yeah.
00:36:59.599 --> 00:36:59.760
Yeah.
00:36:59.920 --> 00:37:03.920
So you have to like go around each by adding a layer of nesting yourself.
00:37:04.320 --> 00:37:16.400
Yeah, and this is this is why honestly, tiny apple a lot of the time, it just I end up so fond of it because having to write like enclose rank one and then parenthesizing it, it just hurts, it hurts the soul, you know?
00:37:16.559 --> 00:37:28.719
That like you're almost doubling the length of your solution, which I I know code golf is not the end goal, but it's like when when you talk to Kai, it's about how the ease of like expressing what you want.
00:37:28.960 --> 00:37:34.320
You're always like he is they're always trying to make that as easy as possible, right?
00:37:34.400 --> 00:38:01.760
Like it's not about like we're we're trying to make uh code golfing the usefulness of this language, but when you end up having to write five characters in order to express a thing that's expressible with a single primitive in another language, like I don't know, that that there's always like it makes me a little bit sad because I'm just trying to express and like I know how to do it in like three or four characters in my head, but if it ends up being twice as many or three times as many, like that it does seem like you know it's a barrier to expressing the algorithm.
00:38:01.920 --> 00:38:12.559
And in Tiny Apple, a lot of the times, like you have the shortest path to expressing yourself because you have access to all all the all the primitives, which is which is really really nice in my opinion.
00:38:12.800 --> 00:38:23.280
I mean sometimes brackets, but uh one of my design principles is like writing code has to be satisfying, and you know, working around things is never satisfying, you know.
00:38:23.360 --> 00:38:28.960
Adding it an each, it's fine, but you know, having to do all of this might work myself, it's a bit less satisfying.
00:38:29.039 --> 00:38:33.119
So if I had to choose between the two options, I'm gonna go with the more satisfying one.
00:38:33.599 --> 00:38:34.000
Yeah.
00:38:34.239 --> 00:38:41.199
Max is saying disclose rank one is more general and compositional than split.
00:38:42.000 --> 00:38:43.760
They are the same thing.
00:38:43.920 --> 00:38:45.760
I I think they mean minus one, maybe.
00:38:46.079 --> 00:38:49.280
Or may or maybe they mean like split the the tiny apple version.
00:38:49.519 --> 00:38:51.840
We were talking about this early in the record, I think.
00:38:51.920 --> 00:38:55.599
So if I have like a 3D array, actually it doesn't work here.
00:38:55.760 --> 00:38:56.559
Let me do it here.
00:38:57.679 --> 00:38:57.840
Okay.
00:38:58.400 --> 00:39:04.800
If I have uh two, three, four, something, then split it's gonna be like this.
00:39:05.039 --> 00:39:10.400
This is the dialogue uh down arrow, and then this is the tiny apple down arrow.
00:39:10.639 --> 00:39:12.000
So they are clearly different.
00:39:12.079 --> 00:39:19.760
I like the second one more because it you know it feels more line axis, which is always nice, but I don't really ever reach for the first one, I don't think.
00:39:19.840 --> 00:39:22.800
But you know, I can imagine you know, some users for it, maybe.
00:39:23.039 --> 00:39:25.840
Of course, for matrix, the matrices is the same thing.
00:39:26.000 --> 00:39:28.639
If I just do two, three, I'm gonna get the same thing.
00:39:28.880 --> 00:39:32.480
Because of course, you know, the rank is two, so two minus one is one again.
00:39:32.719 --> 00:39:34.320
But for everything else, it's different.
00:39:34.400 --> 00:39:37.039
So I guess it depends on your goals, I guess.
00:39:37.360 --> 00:39:41.519
Yeah, Adam in the chat he's he's saying all very good to be able to express yourself.
00:39:41.760 --> 00:39:44.480
He's saying precisely, but maybe he means concisely.
00:39:44.559 --> 00:39:46.800
Or maybe he does mean precisely, he can clarify.
00:39:46.960 --> 00:39:50.239
But the inflated vocabulary has cost for readers, see Chinese.
00:39:50.480 --> 00:39:53.599
I mean, I don't know obviously there's a threshold.
00:39:53.840 --> 00:39:57.280
That being said, like Yeah, you can see that there's all of this.
00:39:57.920 --> 00:40:00.639
Yeah, I'm not gonna deny that, but I don't know though.
00:40:00.719 --> 00:40:09.840
I don't I do not think that there are too many primitives in the wrong, I don't know them all, but that's just because I don't spend, you know, eight hours a day writing Tiny Apple.
00:40:09.920 --> 00:40:22.639
I spend most of my time switching between these languages and then forgetting, as as you did a couple times, that like the split or whatever in in cap is is the disclosed, because it's so confusing when we swap between the different names.
00:40:22.800 --> 00:40:26.159
And I don't know every single primitive in any one of these languages.
00:40:26.320 --> 00:40:29.440
But that being said, I don't think Tiny Apple uh has too many.
00:40:29.599 --> 00:40:34.400
And like uh in fact, uh I don't know what the limit is, but like a hundred, two hundred, that's not the limit.
00:40:34.480 --> 00:40:55.840
The the human brain is capable, especially if you're using these things as like a daily driver, like yeah, I think it's it's more than possible to uh and like the thing is when I when I go to when I go to fixed APL, I mean I know that fixed APL is in its infancy right now, but like there's I think there could be like three times as many glyphs, because there's a ton of things that don't exist there yet, right?
00:40:55.920 --> 00:40:58.000
I think I don't think deduplicate is there.
00:40:58.239 --> 00:41:03.440
I don't even think, if I recall correctly, that there are sort primitives yet, maybe, or I don't know.
00:41:03.519 --> 00:41:06.320
There was not I'm not sure actually.
00:41:06.480 --> 00:41:07.360
There might have been grade.
00:41:07.440 --> 00:41:09.760
I know they have one or the other, but they didn't have both.
00:41:10.000 --> 00:41:12.159
Anyways, I that that uh yeah.
00:41:12.320 --> 00:41:18.000
And that that's the other thing, is uh we uh a while ago I was talking about how Tiny Apple, I'm pretty sure is my favorite.
00:41:18.159 --> 00:41:24.719
But sometimes I I I flip-flop between do I want fixed airity or do I not want fixed airity?
00:41:24.880 --> 00:41:31.119
Because if you have fixed airity, one of the disadvantages is now you you know all things equal need twice as many glyphs.
00:41:31.199 --> 00:41:35.440
Whereas with Tiny Apple, you can overload on the the valence.
00:41:35.599 --> 00:41:41.199
And so is that just a problem though, that we have a lack of like nice fitting together Unicode glyphs?
00:41:41.360 --> 00:42:01.920
And so that I'm gonna end up with like an awkward-looking language because you know, if I want all the whatever 200 primitives and tiny apple in a fixed airity language, I now need 400 primitives, uh, which then leads you to exactly where I mean you mentioned in your blog that inverses, I I did you I can't remember if you called it it was a cheap trick or a hack or something just to like avoid needing new glyphs.
00:42:02.159 --> 00:42:04.719
Oh, I don't remember either, but yeah, it's definitely something like that.
00:42:04.960 --> 00:42:05.519
Something like that.
00:42:05.679 --> 00:42:13.199
And that's I I mean, when I see what Kai's done with Weewa, I really like the the un and the ante and yeah, a cheap way.
00:42:13.360 --> 00:42:14.159
And uh I don't know.
00:42:14.239 --> 00:42:16.000
I like I I haven't made my mind up.
00:42:16.079 --> 00:42:17.280
I I'm curious to get your thoughts.
00:42:17.360 --> 00:42:19.039
You know, you've implemented Tiny Apple.
00:42:19.119 --> 00:42:27.119
It's like, is there a sweet spot for number of glyphs, overloading on inverses, fixed arity versus ambivalence?
00:42:27.199 --> 00:42:35.199
Like, what's your opinion and like if you were to design an I don't know, and like I guess you have tiny apple, but I'm not sure you that would be your ideal language, right?
00:42:35.280 --> 00:42:42.079
It was more of a let's throw everything at the at the whatever the kitchen sink in an array language and and see where we end up.
00:42:42.719 --> 00:42:51.199
Well, you know, again, I'm not the best person to ask how many printers too many because I definitely gonna have as easy to time remembering them than any other user of my language.
00:42:51.519 --> 00:42:54.960
But I think I've not reached the limit yet, for sure.
00:42:55.199 --> 00:43:09.119
I yeah, I can I don't think that being like maximistic like this is the best idea for all types of languages, but you know, the goal is actually to be the kitchen thing to be the playground for experimentation and things like that.
00:43:09.199 --> 00:43:16.559
So the more things you have at your disposal, the easier the new things you can tell if they are useful or not, I guess.
00:43:16.960 --> 00:43:22.320
But yeah, if I were to design more like serious language, I would definitely cut down on the number of images.
00:43:22.719 --> 00:43:23.920
I like Ambivalence.
00:43:24.159 --> 00:43:32.400
I know it's a bit controversial, but you know, there's definitely better pairings and worse pairings, but if they're close enough, I think it's fine.
00:43:32.639 --> 00:43:38.800
It doesn't really hinder the build as much because you know most of the time you can tell what herity something is trying to be.
00:43:38.880 --> 00:43:43.440
You know, maybe it's uh very long range, maybe not, but there's not a lot of those.
00:43:43.519 --> 00:43:49.440
I I do write a lot of those, but uh the average code doesn't, so you can usually tell, I guess.
00:43:49.760 --> 00:43:50.159
Yeah.
00:43:50.320 --> 00:43:59.760
I feel like I would have to go through the exercise of implementing like a fixed APL like language to realize that like there's uh a lack of enough.
00:44:00.159 --> 00:44:12.239
Like if you think of certain primitives like sorting, minimum, maximum, floor, ceiling, all the kind of things like first-last, like all the kind of things where you need to indicate like directional.
00:44:12.400 --> 00:44:16.719
Like we and I know Weewa, they kind of use the arrows with like dashes through them.
00:44:16.880 --> 00:44:22.400
And that that's I'm not do I I I asked it in the YouTube video, but then didn't get any comments so far.
00:44:22.719 --> 00:44:37.039
I don't in particular love any of the first last primitives because I don't really I mean, arguably the tiny Apple ones are the nicest because one of them is like smaller than the other one.
00:44:37.119 --> 00:44:48.480
There's still symmetry, but the underbar you can kind of think of as you know, the default is sorting up, and therefore if you were to like sort size-wise, you know, you kind of can see that it's at the end.
00:44:48.639 --> 00:44:51.360
But that is, admittedly, a bit of a stretch, right?
00:44:51.440 --> 00:44:52.480
I'm building a story.
00:44:52.880 --> 00:44:53.760
Oh, for sorting.
00:44:53.840 --> 00:44:58.239
Um not for sorting, but just for first and last, like uh like you just had.
00:44:58.480 --> 00:45:03.039
It's yeah, it's it's and even the tax that Weewa uses for first and last.
00:45:03.119 --> 00:45:23.039
And it's the same thing with the pick, because I I think they say is that it you're supposed to be like picking from one, but then like the the tax, I don't actually anyways, I I don't I don't have I'm I'm waiting for someone to discover the the perfect first and last primitives because or or not pick and weewa, but the the first and last and weewa.
00:45:23.280 --> 00:45:34.000
Um and I've hey I've heard that like in BQN and and APL when you use the the pick or the select, it's kind of supposed to be like a hand, or I guess it's not on camera, it's supposed to be like a hand grabbing something.
00:45:34.239 --> 00:45:42.719
But like, does this mean you're like because I I don't know the visually, what is the argument for this being first tier?
00:45:42.960 --> 00:45:47.280
Like I could build a story either way of it being first or last.
00:45:47.519 --> 00:45:54.079
Because technically it could be pointing like it's kind of an arrow at the beginning, you know, without the tip.
00:45:54.719 --> 00:45:59.199
It's like the latter half of an arrow towards the beginning or whatever, I think.
00:45:59.519 --> 00:45:59.920
Yeah.
00:46:00.159 --> 00:46:06.559
Yeah, but Unicode, uh, you know, it's uh I think every language designer has a little bit of a low-hate relationship with Unicode.
00:46:06.719 --> 00:46:13.679
Um you know, it is never exactly what you want, but uh you can always almost always get close enough, and that's fine.
00:46:13.840 --> 00:46:20.880
But yeah, you know, maybe maybe you know Iverson was luckier, you know, getting to pick whatever he wanted for his primitives.
00:46:21.039 --> 00:46:29.679
And you know, maybe you know, there's some languages that do like just make their own things and uh then you put them on like you know, custom encoding and things like that.
00:46:29.760 --> 00:46:48.159
And uh, you know, it's got the drawback that it's sometimes I think it's nice that you can just draw things however you want them and uh they can become your primitives without having to, you know, slightly alter the existing Unicode characters in a way that doesn't make them too far from them, but you know, you can still read them without the font and things like that.
00:46:48.239 --> 00:46:49.440
You know, it's a bit of a struggle.
00:46:49.679 --> 00:46:50.000
Yeah.
00:46:50.239 --> 00:46:57.199
I don't even know what I would choose if I could design from scratch a first and last primitive, what I would even choose.
00:46:57.440 --> 00:47:09.119
At one point I thought actually the Alpha and Omega from dialog APL was actually kind of nice, but I've always thought that those don't really fit as like primitives.
00:47:09.519 --> 00:47:11.760
Yeah, I think it's definitely better as names.
00:47:11.840 --> 00:47:14.159
They used to be primitives in like the very early days.
00:47:14.320 --> 00:47:16.079
I think I used this for first.
00:47:16.400 --> 00:47:16.800
This one.
00:47:17.199 --> 00:47:20.480
I don't know if there's equivalent for last, but I would use this one.
00:47:20.880 --> 00:47:28.559
That one's decent, I guess, because yeah, it's pointing to the what is canonically the first element of a matrix, I guess, right?
00:47:28.880 --> 00:47:32.400
Yeah, I think it attends to any array in general, like pretty easily.
00:47:32.800 --> 00:47:33.840
Actually, actually, yeah.
00:47:33.920 --> 00:47:36.719
I guess well, I guess we use the arrows for assignment.
00:47:37.119 --> 00:47:38.800
So you can't repurpose those.
00:47:38.960 --> 00:47:44.000
I was gonna say you could just use the left arrow, but those are well technically we'll be like that.
00:47:44.159 --> 00:47:48.079
You know, it just uh slightly looks like an arrow, I suppose, closely now.
00:47:48.400 --> 00:47:55.440
Are there are there primitives on ShapeCatcher for um a left arrow with like a a uh vertical dash through it?
00:47:55.760 --> 00:47:58.559
Oh, like the yeah, left arrow with size.
00:47:59.039 --> 00:48:01.440
Like a sideways version of what WeWa does?
00:48:01.840 --> 00:48:03.920
Yeah, like that's yeah.
00:48:04.159 --> 00:48:06.480
Oh wait, that's already an APL symbol?
00:48:06.719 --> 00:48:07.039
Yeah.
00:48:07.280 --> 00:48:09.039
What what APL uses that?
00:48:09.119 --> 00:48:10.960
Uh I don't remember.
00:48:11.199 --> 00:48:13.679
There's a lot of those that I have no idea where they're actually from.
00:48:13.840 --> 00:48:15.760
Let's see if I can show the whole block.
00:48:16.000 --> 00:48:16.800
Oh, no?
00:48:17.039 --> 00:48:17.760
Okay, whatever.
00:48:18.000 --> 00:48:34.239
There is a lot of primitive uh uh glyphs in the APL block, which either like we're I don't think we're ever to actually use or like only used by very old things, and uh you know some of those nice lot of like quads with arrows and uh with like a jot with uh colon and all that.
00:48:34.800 --> 00:48:39.360
So some of them like could repurpose later for newer things, like the what is it?
00:48:39.519 --> 00:48:44.559
It's cap that uses it for like the um alter product, the the quad with the jot, I think.
00:48:44.800 --> 00:48:46.000
Yeah, yeah, that's cap, yeah.
00:48:46.239 --> 00:48:51.119
Yeah, I think it was used for something else, but then it never really caught on, so it ended up being free.
00:48:51.760 --> 00:48:56.000
So these ones specifically, the arrows with the strokes, I'm not really sure what they're for.
00:48:56.239 --> 00:49:00.000
You know, we were obviously using it right now, but I don't think they were at because of V1.
00:49:01.519 --> 00:49:02.079
Interesting.
00:49:02.239 --> 00:49:07.440
Well, one of these days there will be an array language with the perfect first and last glyphs.
00:49:07.760 --> 00:49:15.039
Anyways, we we also haven't mentioned so I I recently added Tiny Apple to the combinatory logic website.
00:49:15.519 --> 00:49:23.440
And so I don't think I did, I did, if you follow me on any of the Blue Skies or Mastodons, it's on the graphic tab.
00:49:24.559 --> 00:49:26.239
Yeah, now Tiny Apple is there.
00:49:26.480 --> 00:49:28.239
And I've also I've also changed it.
00:49:28.320 --> 00:49:36.000
I mean I made a YouTube video in the past where uh it was had these animating glow boxes, but no one ever commented on it.
00:49:36.079 --> 00:49:48.320
But I've always was subtly upset with the fact that I only would highlight the trains if there weren't any primitives for also spelling the two trains.
00:49:48.559 --> 00:49:54.400
So the B and the B1 combinator and dialogue and BQN were never there.
00:49:54.559 --> 00:49:58.719
No one ever said anything about it, but I always was kind of like that's an incomplete thing.
00:49:58.960 --> 00:50:10.159
And so when I was adding Tiny Apple, I I finally bit the bullet, got rid of the animations, and now just color the the asterisk, which represents the fact that there's a train there.
00:50:10.480 --> 00:50:14.719
A question that came out of this was what was the motivation?
00:50:14.880 --> 00:50:24.079
So you have two different primitives for the S and Sigma combinators, and from what I can tell, they are identical.
00:50:24.239 --> 00:50:26.079
Is that so are they identical?
00:50:26.159 --> 00:50:28.559
And if so, no, what's so there is a difference?
00:50:29.039 --> 00:50:30.400
Only identical monadically.
00:50:30.559 --> 00:50:33.039
You don't have the computers for the dialogue version?
00:50:33.280 --> 00:50:34.639
It's the left and right forks.
00:50:34.880 --> 00:50:36.639
I think we talked about that last time.
00:50:36.719 --> 00:50:37.280
Let's see.
00:50:37.519 --> 00:50:38.400
Let's do it here.
00:50:38.480 --> 00:50:41.280
So if I have was I already entering Apple?
00:50:41.440 --> 00:50:42.079
Yes, I was.
00:50:42.400 --> 00:50:42.639
Okay.
00:50:42.960 --> 00:50:44.800
Let's change a good example.
00:50:44.960 --> 00:50:48.239
So you know how in dialogue you do like not equals what is this?
00:50:48.320 --> 00:50:49.360
No, yeah.
00:50:49.679 --> 00:50:53.039
Not equals partition rights at the best.
00:50:53.360 --> 00:50:54.800
Oh yeah, for splitting on spaces.
00:50:55.840 --> 00:50:57.119
Oh, like on the keyboard, okay.
00:50:57.280 --> 00:50:59.519
Yeah, and it splits on like uh places or whatever.
00:51:00.000 --> 00:51:03.920
You know, there's a tag here, so it means it's kind of useless stuff.
00:51:04.159 --> 00:51:07.840
You know, it's not really doing anything, just it's just saying grab the right argument.
00:51:08.559 --> 00:51:09.519
I don't think it's gonna work.
00:51:12.639 --> 00:51:12.960
Yeah.
00:51:13.280 --> 00:51:19.039
This tag here is not saying anything, there's no meaning attached to it, just saying grab this argument.
00:51:19.280 --> 00:51:21.760
So you can reduce it to just two functions, right?
00:51:21.840 --> 00:51:25.360
So it's the not equals and the partition, those are the important ones.
00:51:25.599 --> 00:51:30.320
And then you can so that you just use a combinator for that, and it's the left fork combinator.
00:51:30.559 --> 00:51:36.079
So it's called left fork because uh you specify like the leftmost functions of a fork.
00:51:36.320 --> 00:51:39.440
So the the rightmost one is implicitly a right tack.
00:51:39.599 --> 00:51:41.599
So if I do this, what happened?
00:51:41.840 --> 00:51:43.679
Oh, it has to be like this, I think.
00:51:44.159 --> 00:51:44.639
Yeah.
00:51:44.880 --> 00:51:49.360
So you just this is the same as using like little banana brackets like this.
00:51:50.559 --> 00:51:50.800
Right.
00:51:51.199 --> 00:51:55.360
And the other one is just a schematic version, and the implicit one is the left duck, of course.
00:51:55.440 --> 00:52:03.280
But moradically, they just have the same meaning as the the hooks because I I don't know, I just couldn't find anything that was useful other than that.
00:52:03.599 --> 00:52:03.840
I see.
00:52:03.920 --> 00:52:04.639
So that's what happened.
00:52:04.719 --> 00:52:13.280
I tested this on monadic use cases and then came to the conclusion that they were the same, but they're only the same in the monadic case, not in the dyadic case.
00:52:13.599 --> 00:52:20.320
And I guess, yeah, so Adam Adam's pointing out that there's a bunch of combinators that are missing from my table.
00:52:20.960 --> 00:52:21.760
That's a good question.
00:52:21.920 --> 00:52:26.559
Should I go add the rows that haven't don't have representation there?
00:52:26.719 --> 00:52:30.000
Because historically there was no array language that had those.
00:52:30.079 --> 00:52:34.960
But now I guess Wewa has a bunch of the Nike.
00:52:35.920 --> 00:52:36.159
Let's see.
00:52:36.559 --> 00:52:38.559
This one I think we want, this one isn't.
00:52:38.960 --> 00:52:40.719
Just some for me, I think.
00:52:40.960 --> 00:52:45.039
This one and this one aren't, but they're just you know not that important to me.
00:52:45.599 --> 00:52:48.000
They're just like swapped versions of the other ones.
00:52:48.079 --> 00:52:48.960
So like so.
00:52:49.039 --> 00:52:54.000
If I write F atop G, I can always write G reverse it up F.
00:52:54.079 --> 00:52:59.360
It's just the same thing, but it saves on like those sometimes it's easier to read compositions the other way.
00:52:59.519 --> 00:53:02.000
Yeah, just for reading other reverse it up.
00:53:02.400 --> 00:53:04.639
No, that's uh I don't remember like this.
00:53:04.719 --> 00:53:10.239
Yeah, reverse it up is just the same as doing sorry, what's called over, yeah, F reverse over, yeah.
00:53:10.400 --> 00:53:14.320
So these ones, the Q bird is from the Smollyon book, I think.
00:53:14.559 --> 00:53:17.599
This one I just made up to be honest, and this one as well.
00:53:17.920 --> 00:53:20.480
Uh I'm trying to think if there's anything else.
00:53:20.639 --> 00:53:23.599
Yeah, the hooks I think you already called them Z bro, yeah.
00:53:23.760 --> 00:53:29.119
So yeah, I think the main ones that I would add are these two because they are both in Tiny Apple and in Weewa.
00:53:29.360 --> 00:53:31.920
Maybe the ones that only I have, they're not that important.
00:53:32.000 --> 00:53:35.119
You know, if somebody else has them, maybe they become important, you know.
00:53:35.440 --> 00:53:39.519
And definitely not that important in the grand scheme of things, you know.
00:53:39.599 --> 00:53:39.920
Yeah.
00:53:40.239 --> 00:53:57.760
Yeah, it makes sense, I guess, why or I'm actually I'm not sure about in Wiwa, but in Tiny Apple or just in general in APLs if that have forks, they aren't necessarily going to save you characters.
00:53:58.000 --> 00:54:08.400
Although in CAP, CAP would actually benefit from them in the case where you might need it, because it would save you having to write the fork syntax, right?
00:54:08.559 --> 00:54:08.719
Yeah.
00:54:08.960 --> 00:54:10.480
It would save you two characters.
00:54:10.719 --> 00:54:19.199
And in that case, it probably is, it does seem more irritating to write like the double angle and then just to put an identity there, right?
00:54:19.280 --> 00:54:24.880
Like that seems a little bit I guess if you're just in a three-train and in dialog APL, it's not that bad.
00:54:25.119 --> 00:54:27.840
But yeah, in general, I mean that's what combinators are, right?
00:54:27.920 --> 00:54:36.880
There when you have an identity or a W combinator, a duplicator, like those just become new combinators because you can omit that stuff.
00:54:37.199 --> 00:54:38.320
Interesting, interesting.
00:54:38.480 --> 00:54:43.760
So yes, I will consider adding because both Weewa and Tiny APL have the Nicator birds.
00:54:43.920 --> 00:54:47.760
And I think was it did those come from Smollian or did uh did Kai make those up?
00:54:48.159 --> 00:54:55.119
I think uh I researched this when I made the page, and I think no, I don't know actually.
00:54:55.280 --> 00:54:57.920
I I couldn't find any area reference.
00:54:58.079 --> 00:55:01.519
I think they're from Kai, but I didn't ever actually ask him.
00:55:01.599 --> 00:55:11.440
I think also the zebra dove, I think is his uh the zebra dove I think I made up, but I I made it up just like I was like, I need some other dove.
00:55:11.840 --> 00:55:14.079
Yeah, and that was the one that I ended up chosing.
00:55:14.320 --> 00:55:15.679
Yeah, the same with the violet starling.
00:55:16.000 --> 00:55:17.199
The weewa page for sure.
00:55:17.360 --> 00:55:17.760
Uh okay.
00:55:17.840 --> 00:55:20.079
Yes, maybe the Nicators though I didn't.
00:55:20.639 --> 00:55:22.480
If it didn't do this one, I think it was Kai.
00:55:22.639 --> 00:55:27.440
I couldn't find any earlier reference around other than the Wiwa pages, so it's probably inevitable.
00:55:28.000 --> 00:55:30.559
Let's see, let's see if I can get an Eastern Nicator.
00:55:30.960 --> 00:55:35.840
You're not yeah, yeah, you're not gonna see this, but oh except watch this as I crash.
00:55:36.400 --> 00:55:37.440
Oh, it's cute bird.
00:55:37.599 --> 00:55:39.440
That's not that's not what I meant to do.
00:55:39.679 --> 00:55:41.679
But uh it's alright.
00:55:41.920 --> 00:55:43.679
Is it as good as a zebra dove?
00:55:44.079 --> 00:55:50.960
Let me tell you folks, it's not well, I gotta be honest, I was expecting that to look a little bit more like a zebra than it does.
00:55:51.599 --> 00:55:53.760
Anyways, I bombard, I guess.
00:55:53.920 --> 00:55:55.199
Oh, wait, you were showing it the whole thing.
00:55:55.360 --> 00:55:58.079
Here I am trying to hover up, but uh we're doing the same thing.
00:55:58.159 --> 00:56:03.280
I was blocking uh, I guess yeah, your zebra dove looks a little cuter than my zebra dove that I came up with.
00:56:03.519 --> 00:56:06.400
All right, so I mean we've got uh 20 or 25 minutes left.
00:56:06.480 --> 00:56:10.719
Uh, one of the things that I said that maybe we could do, I can send you the link if you want.
00:56:10.880 --> 00:56:16.800
So, and I actually too, maybe before I we switched to our our kind of last thing.
00:56:16.960 --> 00:56:22.639
Are there are there things that we haven't touched on that you maybe wanted, I mean, just while you're on TASIC talk to to bring up to chat about?
00:56:22.800 --> 00:56:26.400
I mean, have we talked about AP8L previously?
00:56:26.639 --> 00:56:26.800
No.
00:56:26.960 --> 00:56:27.440
I don't think so.
00:56:27.760 --> 00:56:28.320
I don't think so.
00:56:28.639 --> 00:56:29.760
That's definitely worth highlighting.
00:56:30.480 --> 00:56:34.239
Yeah, I just uh one second and I'll share the another screen.
00:56:34.719 --> 00:56:41.519
Yeah, this was uh I made it to doing the you know, the kind of like burnout from Tiny Apple.
00:56:41.679 --> 00:56:49.599
You know, it's starting to to end that one, but you know, I was trying to to get back into doing uh array stuff, so I made uh a whole new language.
00:56:49.920 --> 00:56:50.960
As one does.
00:56:51.519 --> 00:56:55.440
You get burned out from one array language and then you just go create a whole new one.
00:56:55.760 --> 00:56:57.679
Uh let's see if I can share my screen.
00:57:01.360 --> 00:57:01.599
Okay.
00:57:02.079 --> 00:57:03.199
Ooh, look at that.
00:57:04.000 --> 00:57:13.119
Yeah, it's just this one is uh a lot is very much inspired by you know old EPL, so it's got no nesting at all.
00:57:13.519 --> 00:57:25.119
It's m very similar to EPL 360, except the function definition is slightly different, but there's like you know, it's mostly draw-massed as branching and things like that, which Tiny Apple doesn't have.
00:57:25.440 --> 00:57:31.679
There is a few like modern things, like there is essentially orientation with uh curly grasses.
00:57:32.079 --> 00:57:34.880
Um trying to see if there's like a square root lift.
00:57:35.360 --> 00:57:35.840
So cute.
00:57:36.079 --> 00:57:36.960
I think I have a point.
00:57:38.239 --> 00:57:41.440
Oh all the points.
00:57:43.039 --> 00:57:49.280
Oh, this is uh yeah, d I feel like I've seen a K dock screen similar to this.
00:57:49.599 --> 00:57:54.239
Because it shows the monadic on one side and the dyadic on the other side, correct?
00:57:55.440 --> 00:57:59.599
Oh you might be frozen.
00:58:00.800 --> 00:58:04.800
Alright, well bear with us folks while Madeline rejoins.
00:58:07.199 --> 00:58:08.239
You're back.
00:58:09.360 --> 00:58:11.760
Although is your audio working?
00:58:12.159 --> 00:58:13.280
Yeah, it looks like it's working.
00:58:13.679 --> 00:58:13.920
Great.
00:58:17.840 --> 00:58:19.599
Yeah, it's definitely inspired by K.
00:58:20.400 --> 00:58:21.920
I'm not sure what last thing we're saying.
00:58:22.239 --> 00:58:34.239
Yeah, so I kind of like, you know, not being able to fit any more things in this page kind of made you stop, which is probably a good thing because uh, you know, some projects have to be complete sometimes, you know, you can just keep adding things forever.
00:58:34.800 --> 00:58:37.039
Yeah, this looks well, I can see you look at this.
00:58:37.280 --> 00:58:41.840
AP8L also has first and last, as you can see in the bottom left corner.
00:58:41.920 --> 00:58:47.039
So really, really making the uh the languages that don't have it look bad.
00:58:47.280 --> 00:58:49.599
And but I'm seeing a couple things.
00:58:49.840 --> 00:58:53.440
Is pivot just a uh name for dyadic transpose?
00:58:54.159 --> 00:58:55.920
Yes, it's a we were name for it.
00:58:56.000 --> 00:59:00.559
Um the primitive orient, but orient is like the inverse of transpose.
00:59:00.800 --> 00:59:07.599
So if you do the inverse of orient, you get uh, you know, it's I don't think it's an official name, but the community usually calls it pivot.
00:59:07.760 --> 00:59:10.800
So I called it that because you know dyad transpose is too long.
00:59:11.280 --> 00:59:15.920
And what is uh I see group, and then below that I see groon.
00:59:16.000 --> 00:59:18.719
So I guess my question is Oh no, it's grade up and grade down.
00:59:19.039 --> 00:59:19.840
Oh, great.
00:59:20.320 --> 00:59:24.719
These are supposed to look like the great characters, but there's not much you can do in five by three, you know.
00:59:24.880 --> 00:59:28.639
I tried to make that I think those are suggested by someone else actually.
00:59:28.719 --> 00:59:32.079
Uh asked in the farm for some ideas, and somebody suggested these.
00:59:32.320 --> 00:59:32.880
Oh, I see.
00:59:32.960 --> 00:59:35.519
There's a a slight difference between the D and the O.
00:59:35.679 --> 00:59:38.000
I was looking or Yeah, okay, yeah, it isn't O.
00:59:38.079 --> 00:59:38.800
I was gonna like it.
00:59:38.880 --> 00:59:40.480
That's sort up and sort down.
00:59:40.960 --> 00:59:45.519
Okay, so grade up and grade down, solo pair, drop take.
00:59:45.840 --> 00:59:52.320
Okay, so basically, yeah, this is this is I mean a couple different names for things and a couple new things like square root and root.
00:59:52.480 --> 00:59:53.119
But very cool.
00:59:53.199 --> 00:59:55.760
And people can go and play with this online if they want.
01:00:00.639 --> 01:00:03.039
I Marsha made a week page for me.
01:00:03.119 --> 01:00:04.480
I'm very thankful for that.
01:00:04.719 --> 01:00:06.000
I think it's linked there.
01:00:11.039 --> 01:00:15.119
I can't find my oh no.
01:00:15.599 --> 01:00:24.320
I can't find my the the the window to share, but uh if you go on the weekend and you look up my name, you can find the link to detail that.
01:00:24.960 --> 01:00:25.119
Okay.
01:00:25.599 --> 01:00:28.400
I mean I can share the uh the next one if you want.
01:00:28.480 --> 01:00:29.840
Or if you want, you can share it.
01:00:29.920 --> 01:00:32.079
Uh which one you want me to share?
01:00:32.400 --> 01:00:37.360
Yeah, I'm having a little bit of problems we have sharing, so you should do it smart in that area.
01:00:37.760 --> 01:00:40.239
Let's which what which screen should I share on?
01:00:40.559 --> 01:00:45.679
I think I'll share on and so we're gonna also have to go.
01:00:45.920 --> 01:00:52.880
I can't even actually remember what the name of the problem is, but I guess we don't need it.
01:00:53.119 --> 01:01:00.320
And let's make this full screen, and I will share I guess just the window is fine.
01:01:01.199 --> 01:01:02.880
So hopefully this should work.
01:01:03.440 --> 01:01:07.440
So this was a problem I don't actually remember.
01:01:07.519 --> 01:01:16.800
I'm pretty sure it was a pro weekly challenge that I solved a while ago, and I'm pretty sure was it the first one?
01:01:17.119 --> 01:01:24.880
And I think I think the name of the problem I've taken now, whenever there's a problem on Pro Weekland Challenge, I try and abbreviate it to like two characters.
01:01:24.960 --> 01:01:27.920
So I think this is like text justification.
01:01:28.239 --> 01:01:48.159
And this was the solution that I came up with in Tiny Apple, and essentially the problem is you're given a number and you're given a string, and you're supposed to center justify as best as possible that string in asterisks.
01:01:48.559 --> 01:01:53.679
So, I mean, I guess we should just put can I do this with the lowercase?
01:01:53.920 --> 01:01:58.639
And we put N, N, N, and that's the idea, right?
01:01:58.719 --> 01:02:12.400
So if if I change, keep on changing this, and if you ever have like an odd number, you're supposed to put the one less asterisk on the left, or one one less on the yeah, one less on the left, and then have one extra on the right.
01:02:12.639 --> 01:02:26.800
And so this was the solution that I came up with, which if we go through it, we're getting the length of our string, and then we are dividing that by two after subtracting our total length.
01:02:27.039 --> 01:02:41.519
And you had so we're gonna the for the rest of this, we I I have a meeting in the 17 minutes, but uh I often I will uh when I'm doing this in Tiny Apple, after I've solved it, I'll send it to Madeline and be like, How can I do this better?
01:02:41.840 --> 01:02:48.159
Because whenever you have something this long, my first thought is like this can't be the best possible solution to this.
01:02:48.480 --> 01:02:56.719
And I think this was your first stab at like changing mine, but then ultimately this is what you had.
01:02:56.880 --> 01:02:59.280
And I have this was I don't know, when when do you think this was?
01:02:59.440 --> 01:03:00.559
A couple months ago, something like that.
01:03:00.800 --> 01:03:02.000
But yeah, definitely feel why.
01:03:02.239 --> 01:03:03.679
It was it wasn't recently.
01:03:04.000 --> 01:03:17.360
And I said, I'm gonna have to take some time to understand everything that's going on here because I'm not familiar with On Left, and there was a couple other things that you had done.
01:03:17.519 --> 01:03:28.159
And anyway, so maybe we can go through, and I think there was one thing you said that this could be this could be shortened, or I was doing something inefficiently here.
01:03:28.239 --> 01:03:28.960
Do you remember that?
01:03:29.280 --> 01:03:35.920
I think that the second one was your attempt at making it tacit, and uh yeah, this was my attempt at making it tacit.
01:03:36.239 --> 01:03:43.760
There was like a a a bunch of extra brackets that you didn't need that you could move maybe with nothing or with other compositions and things like that.
01:03:43.920 --> 01:03:49.760
And I think if I remember correctly, that I tried like reducing yours as much as possible and ended up being shorter than mine.
01:03:50.000 --> 01:03:54.559
So like your approach was better, but uh you know, you just needed a little bit of refining, I think.
01:03:54.800 --> 01:04:02.960
There's like uh yeah, a thing I can immediately see is that you have like you go like with his two opening brackets like that next to each other.
01:04:03.280 --> 01:04:04.960
The for on the left or the right?
01:04:05.199 --> 01:04:05.760
Yeah.
01:04:06.079 --> 01:04:16.079
Like you're just it's like two atops in a row essentially, so you can remove the inner ones and make them into like with nothing, I think.
01:04:16.400 --> 01:04:17.440
No, not that one.
01:04:17.599 --> 01:04:25.280
Um I don't remember exactly, but you know, there's a lot of places where you could like compose things a little bit differently to get a showter expression.
01:04:25.360 --> 01:04:28.719
Yeah, but the idea is mostly the same within R2, I think.
01:04:28.960 --> 01:04:29.199
Right.
01:04:29.280 --> 01:04:39.840
And so you essentially I think you just build the two strings and then rotate them into place, whereas I built them separately and then combine them at the end, I think it's enough.
01:04:40.320 --> 01:04:44.719
And so on left on left is literally just the same as the top left.
01:04:44.880 --> 01:04:46.880
Same thing, but one less character.
01:04:47.360 --> 01:04:50.480
On left is the same thing as a top left?
01:04:50.719 --> 01:04:51.039
Yeah.
01:04:51.440 --> 01:04:57.039
So if you call it dyadically, it's gonna apply the function just to left argument and completely ignore the right one.
01:04:57.679 --> 01:04:58.719
Oh, okay.
01:04:58.880 --> 01:04:59.760
That's good to know.
01:04:59.840 --> 01:05:02.800
And so you have both on left and on right.
01:05:03.440 --> 01:05:11.679
And I guess yeah, so so your tip is in general that whenever you see a top atop, like so.
01:05:11.760 --> 01:05:18.800
I guess you were saying here, um now these are two autopsy, I can get rid of these two things potentially.
01:05:19.119 --> 01:05:27.679
Yeah, those are being given to an over, so not right now, but you can if you move switch essentially, yeah.
01:05:27.760 --> 01:05:28.719
You can do it like that.
01:05:29.280 --> 01:05:32.320
Yeah, or if you want, you can use the reverse over from before.
01:05:32.400 --> 01:05:35.920
So you could take all of the parentheses and move the already over.
01:05:36.800 --> 01:05:42.239
Oh, so because we only have because the right one is a single glyph, so you can switch it.
01:05:42.400 --> 01:05:43.360
I mean you don't need the market.
01:05:43.599 --> 01:05:48.400
So you know, it just is mostly golf, but you know, it's really satisfying to get short of things.
01:05:48.639 --> 01:05:49.679
Oh did I not did I not?
01:05:51.840 --> 01:05:59.519
And so this is actually I I never use this this glyph, so this is the shift, shift, this is the reverse bind.
01:06:00.239 --> 01:06:03.280
Which I don't think I've ever successfully used.
01:06:03.679 --> 01:06:05.280
The question is, is can I type it?
01:06:05.360 --> 01:06:05.760
There we go.
01:06:06.000 --> 01:06:06.239
Yeah.
01:06:06.320 --> 01:06:11.599
And then you're gonna need uh another between the enclose and replicate because uh it was removed.
01:06:11.840 --> 01:06:13.119
Yeah, I think that's gonna work.
01:06:13.280 --> 01:06:13.440
Yeah.
01:06:13.599 --> 01:06:13.760
All right.
01:06:14.000 --> 01:06:15.119
So that's it'll be shorter for that.
01:06:15.360 --> 01:06:17.199
That's like one or two shorter.
01:06:17.440 --> 01:06:20.400
Um let's see if I can see anything here.
01:06:20.880 --> 01:06:30.719
Usually when you have like a lot of uh brackets at the end, you can remove some of them because it means that you're like composing things with trains when you could be composing them with something else.
01:06:30.960 --> 01:06:32.159
See if I can see.
01:06:32.480 --> 01:06:40.639
I think that the one after the right catenate, you can just remove the train bracket after that and then one at the very end.
01:06:40.719 --> 01:06:41.840
I think that's going to work.
01:06:42.320 --> 01:06:43.360
This guy right here?
01:06:43.599 --> 01:06:45.280
No, the other catenate.
01:06:45.679 --> 01:06:46.320
That yeah.
01:06:46.480 --> 01:06:52.400
If you can remove the bracket right after that, and then one at the very end, I think that's going to work.
01:06:52.880 --> 01:06:53.280
Yeah.
01:06:53.519 --> 01:06:54.159
Oh no.
01:06:54.880 --> 01:06:55.920
Yeah, I don't know.
01:06:56.000 --> 01:07:01.599
I'd be hard to do it right now, but yeah, no, yeah, it does definitely have to like you could remove again.
01:07:01.840 --> 01:07:08.400
Yeah, I don't exactly uh Well, so actually, so this is a right tack.
01:07:08.559 --> 01:07:10.960
So actually this seems like it might be a combinator, right?
01:07:11.039 --> 01:07:12.480
We just had the forks.
01:07:12.639 --> 01:07:15.840
This is I think it's just a hook because it's monadic.
01:07:16.000 --> 01:07:25.039
But if it's not, it's not a combinator because essentially so the left fork has an implicit right tack and the right fork has an implicit left tack.
01:07:25.119 --> 01:07:35.840
So because the things that you want to keep are on the right, you're gonna have to use the right tack, but then the the sorry right fork, but then the implicit attack is going to be the left one, so it's not what you want.
01:07:36.079 --> 01:07:38.000
You can probably do it with some commutes.
01:07:38.159 --> 01:07:43.920
So if you use a left tack and a commute, I think it works, but I'm not sure exactly what I'm saying.
01:07:44.079 --> 01:07:45.519
I have to try to understand.
01:07:45.840 --> 01:07:49.039
I don't really have a way to find the link myself here.
01:07:49.599 --> 01:07:50.800
Yeah, that's what I was thinking.
01:07:50.880 --> 01:07:54.400
You could do some commute, but then would it actually be shorter at the end of the day?
01:07:54.719 --> 01:07:55.519
Yeah, I'm not sure.
01:07:55.760 --> 01:07:58.800
Maybe if you combine it, we all think it's gonna be the end of the folder.
01:07:58.960 --> 01:07:59.440
I'm not sure.
01:07:59.599 --> 01:08:02.159
I think mine, I'm trying to read it right now.
01:08:02.480 --> 01:08:09.519
Yeah, I just like divide the thing in half and then I I do the floor and the ceiling, and I use one on the left and one on the right.
01:08:09.599 --> 01:08:12.320
So I don't be biased uh the way you want it to be.
01:08:13.039 --> 01:08:14.400
I mean this doesn't work, right?
01:08:14.559 --> 01:08:17.199
If I do Oh, it does work.
01:08:17.439 --> 01:08:18.159
Oh yeah, it could work.
01:08:18.239 --> 01:08:20.640
Oh wait, did I did I I know I did evaluate that.
01:08:20.880 --> 01:08:21.600
So that works.
01:08:21.760 --> 01:08:27.760
So now I mean, well, if we get rid of the spaces in the explicit solution, we're still a couple characters longer.
01:08:28.000 --> 01:08:30.079
But so this is all one fork.
01:08:30.319 --> 01:08:30.800
Yeah.
01:08:31.119 --> 01:08:33.600
This is a fork.
01:08:34.319 --> 01:08:37.920
That's and then this is uh a fork as well.
01:08:38.159 --> 01:08:46.319
I mean there's a I mean there's a I mean that's uh it's probably a lot of work, but that's this is where it would be a killer feature, is if you had the uh the train trees.
01:08:46.560 --> 01:08:46.800
Yeah.
01:08:47.920 --> 01:08:50.640
I can't like train like boxes, I guess.
01:08:50.720 --> 01:08:52.560
I already have the structure for that trees.
01:08:52.720 --> 01:08:58.159
It's probably gonna take more work for sure, but yeah, eventually they're very nice to look at, so I'm probably gonna have them at some point.
01:08:58.479 --> 01:09:04.960
Yeah, it helps with readability or and shouldn't say readability, understandability uh quite a bit.
01:09:05.199 --> 01:09:15.199
But defin definitely, yeah, like when I see this, I still think to myself, like, there's gotta be a way, a much nicer way, because we've got what, eight banana brackets on screen right now.
01:09:15.520 --> 01:09:17.359
But yeah, maybe we'll leave it at this.
01:09:17.439 --> 01:09:20.239
But yeah, yours making use of on left.
01:09:20.479 --> 01:09:26.000
It's also making use of the left fork, which is uh really, really nice.
01:09:26.159 --> 01:09:29.199
Anyways, maybe I'll also post this so folks.
01:09:29.359 --> 01:09:34.159
Well, I mean, uh the solution to this is that I just have to release my leak golf website.
01:09:34.399 --> 01:09:37.760
But now uh because of AI, I've just got too many things that I'm working on.
01:09:37.840 --> 01:09:43.439
I've got a Raybox, I've got Leak Golf, there's not enough time in the day to do everything.
01:09:43.760 --> 01:09:48.880
AI just needs to get a little bit better, and uh then ever then everything will be shipped off into the world.
01:09:49.199 --> 01:10:03.039
All right, let me uh stop sharing and then maybe for the last or I got multiple cursors, and for the last uh couple minutes, I haven't been checking the the chat, but I imagine that there's been uh a couple questions.
01:10:04.239 --> 01:10:07.520
And so, yes, there has been a couple questions in the chat.
01:10:07.600 --> 01:10:11.840
So if you have questions, yeah, for the last five minutes here, feel free to ask Madeline.
01:10:11.920 --> 01:10:17.359
So one that looks like you already answered what does cells slash cells do?
01:10:17.760 --> 01:10:28.880
And then you typed transl well, that looks like a Chinese character, but it says like BQN cells, and then so it's just an operator.
01:10:29.359 --> 01:10:37.439
And then Adam said for a modern old flat APL, wouldn't a rank operator make sense?
01:10:37.920 --> 01:10:45.760
Yes, I have most of the code for rank operator already working because I have function access and it's implemented using rank.
01:10:45.840 --> 01:10:48.720
But if I remember correctly, it's like a few issues with it.
01:10:48.960 --> 01:10:56.159
But yeah, probably if I end up fixing those, I'm gonna replace cells with rank, because it's you know definitely more general.
01:10:56.239 --> 01:11:02.880
But I mostly have the cells because just I don't have a way to loop at all inside like functions and stuff, so that was close enough.
01:11:02.960 --> 01:11:05.760
But yeah, I definitely want rank at some point, I think.
01:11:06.079 --> 01:11:10.720
So is Tiny Apple currently doesn't have oh no, it is about AP8L.
01:11:11.039 --> 01:11:12.560
Oh, this is uh AP8L.
01:11:12.880 --> 01:11:24.960
I was gonna say I definitely I recall using uh rank in Tiny Apple, and that would be shocking if in the 200 primitives you didn't you didn't have rank, so this is uh AP8L.
01:11:25.199 --> 01:11:29.039
Oh yeah, and seamlessly, you know, kind of like a rank fangirl.
01:11:29.119 --> 01:11:31.840
So I would definitely keep it uh everywhere.
01:11:32.239 --> 01:11:32.560
Okay.
01:11:32.800 --> 01:11:40.560
Well, while we wait to see if there's one other, you know, final question from or uh cap programming like uh wrote programming language.
01:11:40.880 --> 01:11:42.399
It says 200 isn't enough.
01:11:42.479 --> 01:11:43.359
I assume that's Elias.
01:11:43.680 --> 01:11:47.680
But then it's wrong user of the language self-speaking.
01:11:48.000 --> 01:11:51.039
I'm not sure if that's a joke, but uh like I've we were mentioning that earlier.
01:11:51.119 --> 01:11:53.760
That yeah, I mean I I don't think 200's the limit.
01:11:53.920 --> 01:12:00.159
I I don't know what it is, but like you need 2,000 Chinese or 4,000 Chinese characters just to read a basic newspaper.
01:12:00.319 --> 01:12:06.479
And like, you know, kids in elementary school do that, so you know, we just we need more Unicode symbols.
01:12:06.640 --> 01:12:10.880
And Adam's saying, Where can I find AP8L?
01:12:14.399 --> 01:12:19.439
Uh it's here on my wiki page.
01:12:19.520 --> 01:12:21.920
You can click AP8L and sneak here.
01:12:23.439 --> 01:12:44.399
I was thinking of adding like a table with the parentheses since there's like extra information that's not on the actual implementation, which is about like the the because there is no Unicode in uh in Pico8, so every character has like uh you know a byte associated to it, and I thought maybe adding it to the wiki would be useful, but uh I even asked Marshall Get if I can do that.
01:12:44.479 --> 01:12:46.159
Uh I'm gonna ask him soon.
01:12:48.000 --> 01:12:57.760
Alright, so we've got one last question, and it says, is there any exploration into Hangel style symbol composition for Iversonian language?
01:12:58.000 --> 01:13:00.640
I do not know what Hangel style is.
01:13:00.800 --> 01:13:01.119
Do you?
01:13:01.520 --> 01:13:08.000
Hangle is the Korean alphabet kind of so it's basically like uh every syllable is a glyph.
01:13:08.079 --> 01:13:17.840
Uh I don't have a Hangle keyboard right now, but let's see if we can see so each glyph is a syllable, but the syllable is composed of different characters.
01:13:18.079 --> 01:13:28.560
So each character is a sound, and then you know, each group of characters is a syllable, and maybe I guess it's something like maybe like modifiers apply above and below instead of to the side and not something like that.
01:13:28.800 --> 01:13:30.399
I suppose it's the suggestion.
01:13:30.720 --> 01:13:37.439
Yeah, it would definitely be cool, but if it would be you know even further from Unicode, which is you know definitely a choice that you can make.
01:13:38.000 --> 01:13:39.600
Alright, we still got a couple minutes.
01:13:39.680 --> 01:13:49.680
Uh and Max asks, aka Meme God, are there any frameworks for implementing array languages so users can pick symbols, array models, tacit models, etc.?
01:13:50.239 --> 01:13:51.439
I don't think so.
01:13:51.680 --> 01:13:52.000
Do you?
01:13:52.159 --> 01:13:53.439
You're not aware of any, are you?
01:13:53.760 --> 01:13:57.600
I don't know of any, but it would definitely be a really cool thing to have.
01:13:57.680 --> 01:14:07.520
So though you know that's always a problem of like if everything is like different variations of the same stencil, uh, I don't know how good having all of the variations is.
01:14:07.600 --> 01:14:16.800
You know, you know, starting from scratch, you can do like more graphic design decisions, I guess, which uh you don't get by just you know picking and choosing between different types of things.
01:14:17.039 --> 01:14:28.800
Yeah, it'd be pretty tricky to build build your own language like website because the way the primitives interact it'd probably be quite limited, but it's still an interesting idea.
01:14:29.119 --> 01:14:41.920
And yeah, Alice is saying that uh the problem is that if you're gonna go and create a bunch of more primitives, you're probably gonna end up going outside of Unicode, which is a pretty big ask.
01:14:42.159 --> 01:14:46.399
Anyways, we are at the the half hour mark, so I'll say thank you so much.
01:14:46.560 --> 01:14:50.239
I mean, like I I said in one of my previous YouTube videos, this was long overdue.
01:14:50.479 --> 01:15:02.079
And I can't confirm who we hopefully are gonna be having on the next array cast, but hopefully we'll have a guest and be a similar conversation to this catching up on the the latest and greatest.
01:15:02.239 --> 01:15:16.319
Yeah, hopefully uh the next time we chat won't be a year from now, and and by then we'll have I mean, even if we're not talking about what's the latest developments with uh projects, it's always nice to chat just about I don't know, design, tacit model, primitives, etc.
01:15:16.800 --> 01:15:23.680
There's no endless or shortage of topics to chat about when chatting about these different array languages.
01:15:23.760 --> 01:15:27.600
So great to chat, Madeline, and uh hopefully we'll we'll do this again sometime soon.
01:15:28.000 --> 01:15:28.720
Thanks for having me.
01:15:28.880 --> 01:15:30.319
Always nice to talk with you.
01:15:30.560 --> 01:15:31.439
Awesome.