 The site, but if anybody has any resources for signal processing in APL, I'd be interested. I did a quick search, but I didn't do an exhaustive one. So, like I said, I'll put something up on the site, but. Feel free to add something in the chat if anybody knows anything. Thanks. It might be worth searching for the kind of things you would use for signal processing, like, look on APL wiki and stuff for like Fourier transform or Kalman filter. Yeah, true. Lucian. Interested to hear what you find anyway. Yeah, thank you. Okay, so I remember we were up to. We were in close. Has anybody skipped ahead to figure out what that is? What button to repress for in close again. Let's see. Oh, so for me, it seems like it was doing, say, if on the left hand side, you have 123 it would enclose the first one one time, like, three elements on each side. One, two, three on each side. Could you explain maybe the version we've got here? Does this make sense? We've got 0101 and close one, two, three, four. Oh yeah, sure. Zero one zero one. Let me make sure it does what I think it does. So it's giving us two, three in the first cell and four in the second cell. Apparently. Um, okay, that does my understanding was wrong. All the more interesting. Oh, well, okay. Yeah, I played with it a bit and thought I knew that it did. I'm getting a sense of what it is. It's looked like the ones are defining groups. So it's taking where the first one is and giving us the numbers there. The letters in this case, then the second groups defined here, letters there. Yeah, if you, did you look on the APL wiki? I haven't done anything at all. This is the first time. Okay, so I was just looking it up in the background. I think it's starting to. They just called it what you were saying. It looked like it was a pretty good definition at least starting out that second paragraph. Oh, yeah, it indicates where divisions begin. It seems pretty straightforward. So each one is the start of a new division. I think a wiki example is a bit clearer, I think, or at least that one is. Yeah, that's what I mean. This one. Okay. So then they're saying some dialects by which I assume they mean dialogue included. Okay, so that's just saying create two partition could make this the second. Partitions after the first and then three partitions after that. So it's just creating some empty partitions. All right, well, that seems straightforward enough. So we keep moving along them. Looks like the next one is left shoe under bar, which is written as shift C. I guess right shift C. Okay, starting to get the hang of this. And I think left shoe under bar means nest. Let's check API wiki as well, shall we? It's like, yep. It has some, it's kind of like enclosed with some extra logic so that it doesn't nest too many times. If you nest and nest and nest, it doesn't do that. Okay. Let's have a look at this example, shall we? So this is, that's each, isn't it? This means is it an element of, and so this adds up how many times an E appears in each word? Oh, okay, it's counting out the words, no worries. But if the user only gives one word, it'll count the E's in each letter because it's going each. Yes. You can apply nest. So we've got some examples. I like that they're saying like an example of why it would be useful in API wiki. Even if the example is a little bit complicated. Now that's the same as normal and closed, right? And we can check that by using the tally thing. No, the other thing, match. Okay, they're the same. Is this one different? No, this is, this is different. Okay. I see. So what's the rule it's using? If Y is simple, what does simple mean? I think simple means that it's an array that doesn't contain any arrays. So I think if we did. Two, three, reshape. Six, that would, yeah, that's the same because this is simple. I don't know. I didn't type down where I got the definition, but a simple array is an array of depth one with all primitive values such as a string or array of numbers. Oh, perfect. By the way, what happened to our thing that shows like a little squiggle or thing that tells us, you know, the end shows us the little arrows. Is that some different kind of boxing? Oh, we've got min. I don't want min max. Okay. I think that tells us whether something simple. Yes. Okay. So if I do this, that's considered so I think squiggle might mean simple. And this thing might mean not simple, maybe. Great. So if it's just a, so basically if it's just an array, like, or tensor, I guess, then it's going to return it unchanged. Oh, no, sorry. Yes, I see if it's a, if it's an array that it encloses it. Is that what it's saying? Yes. Okay, so if it's an array, it encloses it. Okay, so they're right, right. So that's enclosed. So if it's an array, it encloses it. Anything else, it does nothing at all. Okay, so they're the three possibilities. So I guess we should show them. And left shoe would have done the same thing now. I just tried it on sleep. And the example also worked. Right. A left shoe does the same. In the case of an array, but not in the case of a scalar or a non-simple object. So that's why you can see here, this is the same. But this is not the same. As you can see, these are different. Okay. Okay, so the scale in the case of a scalar, right. Enclosed does nothing. Okay, so this is called nest. Okay, so they're exactly the same in the scalar case and the simple array case. But they're different in the nested array case. If it's already a nested array, it doesn't nest it anymore. So then biadic is partition rather than partitioned and closed. Oh, I see. It's something about the partitions are now defined in a different way rather than ones and zero. Rather than ones and zeros. It's whatever the left argument new division. There for an element is greater than the name that's left. So here's a new spot. Okay, and you can skip by setting a zero seems powerful. Okay, so by definition, you can split on spaces, for example. So here is a place where it's gone down and therefore it's going to skip the fourth element, which is a space. And then this here goes up again so it's going to create a new partition new group. Okay, so this is, I guess, maybe a good time to talk about forks, because their example here is a fork. Let's start with this example makes sense to everybody. Does that make sense so far as much. Cool. It does make sense, but it seems like, you know, it's quite involved with what it can do and the differences between the operators that we've seen here on close. How much of this was in the original specification of APL and how much of this evolved over time. So essentially how much of this is coming from the can I person's paper. It's just serious. Yeah, I assume this classic edition thing would be closer there is a like a APL dictionary on the J software website, which I guess would be a good place to answer that question. I thought, go to the J dictionary. Yeah, dictionary of APL. Wow, cool. Okay, so here's all the symbols. I guess. And the way it isn't closed here. Oh, except it's called super set. That's interesting. So the way he arrived on this was even without before he, you know, there was no implementation. Initially, right, it was just well this trying to find the notation. And in 1987. So this was well after there was an implementation. Right. Yeah, the original notation. I don't know what the kind of official. Oh, right. I guess going back here. Here we are a programming language 1962. So that was a point when there wasn't an implementation. And I think this would be interesting too because this is where they actually designed IBM computer systems using APL as a notation. Yeah, that's that this sounds like very interesting. And this book I have this book I have. What is it? Oh, it's it's elementary functions. Yeah, it's a basically a math textbook for signed a kind of high school level if I remember correctly. Let's see. One semester pre calculus course. Yeah. So we worked with the Fox Lane high school teachers. So yeah it's like kind of normal staff circular functions inverse reciprocal slope exponential polynomials. But using that is so cool. This notation that the environment or you know where this was devised and yeah, the law of APL is. Although interestingly he's got he's got superscripts, you know, here, which is not what we're using nowadays. We're using star. Although, you know these reductions are the same and it's got subscripts that's also interesting. So anyways, so yeah it starts off by talking about programming stuff and then he's got a chapter about functions. This was fascinating. Thank you so much Jeremy for sharing this. Now I know where to where to look them up. Yeah, no worries. Yeah, the J software website. com slash papers has. Yeah, a lot of. If they send us been a lot of time, you know, scanning in and even most yarring. A lot of stuff. I guess we can do the second example can we. Yeah, so that's why I was saying we're going to do forks next. Yeah. Same left that work. So that's a fork forks. I already talked about one forks so the basic kind of idea that. Adam said that maybe we can still look directly. So I'm not going to do as good a job as he did. Where did he mention. Forks. Oh, maybe it was after the last study session. Okay, well let's try his example. Maybe. If we could do. The reciprocal of three plus. And so here we've got F plus G where F is reciprocal and G is X. And then we're adding them together. And so according to his example, that should be the same as that. Which it is. Does that make sense. So first applies this to three then it applies this to three and applies this to the results. So the example we saw a little earlier was the very famous definition of the main, which is the sum. Divided by the count. So here's a function. We might be in the situation where we cannot see the. Yeah, that's a function. There's a function. There's a function. So make sure you put this operator with a function on its left slash. There's the middle function. There's the right hand. So that's F. That's G. And that's what we're using instead of plus using to five. So the sum divided by the count. So that is equal to two plus five plus eight plus nine divided by four. So makes sense. So plus slash of two five eight nine divided by tally of two five eight nine. And so something that's very interesting about this is that if we defined a function and this is something thought that Aaron shoe calls talks about in his array cast. We could define a function called mean. And that's how we would define it right. And we could run it. And so the interesting point though is that the word mean has the same number of characters as its definition. Like, why, why define a function for this rather than just use the definition anytime you want to use it, because that way you're being more explicit. That's a very good way to spell mean because it actually tells you exactly how to do it. So like it's a totally different way of thinking about software engineering is. Not to create abstractions when you end up with an interaction with a number of letters in its name is the same as the number of letter number of characters and its definition. So I think that's interesting. So here's another interesting example. Okay, so before we do it. We need this one. So this one, which is the same thing pointing right word is that. Okay. That slash case is called right tack. Makes sense. It does look like a tack pointing right right tack. And my attic is called same. And it's what we would normally call the identity function. And it just returns whatever it's passed. Okay, not much we can say about that right. Diatic is called right. It always returns its right argument. Okay. And I am pretty sure that left tack will do the exact opposite. Except one at it will be the same. So left tack. This vertical bar makes sense. Starting to get the hang of their mnemonics for their letters now. Generally you shift to get the kind of the other version of the same thing. Okay. So I forgot to change this. Okay, that was pretty straightforward. Yeah. So this next one is a fork, which Okay, this one here might help to see each bit separately first maybe. Oh, this is a dyadic fork. I think a dyadic fork. I'm pretty sure. Yes. A dyadic fork. Each of F. Oops. F and G are passed in the right-hand side and the right-hand side. So this one's pretty straightforward. That's just going to return the right-hand side so we can then combine those together to say left-hand side. And then the enclose and the right-hand side, which I don't have put in parentheses, but I'm just going to. Okay. Now look, these are the same, right? Because this fork means that the left-hand side and the right-hand side are passed to this and they're passed to this. And then this takes the two results. So this fork is something that will separate the string by spaces. And again, you could, well, not just by spaces, but by whatever's on the left. So we could create a function for that called, you know, split. But the name of the function will actually be more characters than the three characters it takes to define it. Does that make sense? Wouldn't it be more readable to use alpha and omega in such a case? And this is very cryptic. I mean, everything's cryptic when you don't know it, right? I mean, if you do any work with math notation and math notation, we, you know, it's very cryptic. So yeah, sure, it's very cryptic when you don't know it. I think it's error than alpha and omega once you know, because there's less to, at least for me, less to keep in my head. So the alpha and omega version, if you didn't want to do a fork, would be... Split would be defined as alpha not equal to omega, alpha, omega. Oops. Essentially we have to do this in your head. If you want to, if I, right? I mean, kind of. Like, yeah, same thing. I think once you get comfortable with abstractions, you kind of don't. Like, it just slots in there. I feel like this version, you have to do it in your head. Well, this version, I think you could read it as like, fairly directly in English as, what's this name of this character? I don't quite remember. Whatever it is, math, or whatever. So it'd be like, you know, you could say like, I should actually say the right words. Unique mask. Okay. So if you say unique mask partitions, the right-hand side. You know, I think that's probably something that one could become comfortable thinking about that directly. I can see that. It reminds me of your surprise the other day when I mentioned, you know, my daughter. To understand APL than the normal math notation. But like, I think we're just kind of like reflecting our own. You know, yeah. I actually think, yeah. I don't know. I'm like, I'm not. APL speaker by any means. All right. I think that's super interesting anyway. It's fun. I think that's what's intriguing to me like it's interesting research to kind of think about this alternative notation and what it might mean to be comfortable with it. You know, hopefully my, my daughter will teach me that by doing it. Okay, let's do these arrows. I'm going to do them before partition and stuff because I want to segue into fork. So we're using forks and trains interchangeably or trains or so. So trains are great question. So trains just refer to a bunch of functions next to each other with no other punctuation. So a train, you know, an example of a train would be the one that we did for the power operator. Yeah, fun. At least I thought so. This is a train. Now this train. We had function operator function operator function so it's different right so I guess this is a function and then this is an operator and this is a function. I think you'd still call that a train. Another example of the train would be today, we did a two train today. Two train today. When was that. Yeah, it was, I think under dietic partition. The one that you copied from Adam. Oh, here. Line 31. That's a two train right. There's no train here. It's a three train. This is a three train, which is called a fork. Yes, that's why we're sorry. I thought you're looking for a two train. I just want to come up with an example of a two train so a two train, for example, two trains are much easier to understand because they're exactly the same as the side or jot. So if we did to the power of the reciprocal. Right, then it's going to just you just read right one over three, either the power of that. That's the same as the rules right. Yeah, no special rules. And in the dietic case, then like that. Then I believe it does three divided by three burst and then does either the power of that so that's going to be either the power of one. That's interesting. And then this case is different, right, because now it's treating it as this. So that's going to be three to the power of the third. Three. Now in J. This means something else. This means something else. It would be the same as three on both sides. It would be the same as putting three on both sides and that in J is called a hook. So at arms point is that we don't need a special thing for hook, because we can always use until the same, we can always use same. You know, we could put it there or we can put it on the other side to say. Yeah, or you can use to the diarieses. Yeah. Okay. So yeah, I think trains are just bunches of functions next to each other. Okay, so let's do the arrows, which I do see a lot. So it'd be nice to know what they mean. Presumably they're going to call this up arrow. One would hope needs a space. Okay, how about that? All right, and it's called. Oh gosh, what's this again? Think our version is two, isn't it? One. Okay. So it's called mix. Does anybody know why one would change this cord ML thing? I remember it refers to kind of like the version of the language or something. Mix or take. Like, maybe it's just for kind of compatibility. Mix, mix hip hop. Okay. So it looks like it's doing the opposite of that. It seems to kind of go the opposite direction before, didn't we from here to here. What's the role of this? What's the role of this rank of this. This one here. So this is going to be, so the shape of this is going to be two, three. Where else the shape of this is two. Yeah. Does anybody remember how to go from the matrix to the two enclosed versions? Wasn't that the left shoe? No. Let me try. This one. Let's try it. I don't know. I'm guessing. No, that's not what you want. We could do that with each, I guess. How about road to reshape? That's not going to be the same thing because you want to actually enclose them. Oh yeah. And each, what about the rank operator? Which one's the rank operator again is this one? Yes. Okay. I'm sure we had a better way than that. Yeah. All right. So, look at what it's defined as an array, whose items may be uniform in rank and shape or they might differ. Okay, let's ignore the non-uniform case for a while. So then R is an array composed of the items of Y assembled into a higher rank array with one less level of nesting. That's exactly what we saw. So we started out with a rank one array and we've got a rank two array and we have one less level of nesting. So the depth used to be true when I guess the depth is now one. I remember the definition of depth correctly. If they have different ranks, each item is extended in rank to that of its greatest rank by padding with leading ones. Which is padded with relating ones. Okay. So for their example here. Yeah. So this is a vector. This is a scalar. This is a scalar. So this would get padded to become a one element vector. This would become a one element vector. So presumably if we did that manually, we would get the same thing. Yep. That's the same thing. So that's what they're saying is being done implicitly. Okay. So if they're different ranks, you get the ones. Okay. Then I got different shapes, which they do. So now each is padded with the corresponding prototype. I think that a prototype like is the kind of like base default value of a type. So for a number of the prototype is zero. I wish these kind of things had hyperlinks though to definitions. So that's why we ended up with zeros. So in other words, we could do the same thing. By doing it manually. So there's the same thing. Okay. So let's do the dietic version, shall we? Yeah. So if anybody can figure out how to go from the matrix back to the array of arrays more conveniently than my ugly. Version. Let me know. Oh, there's things in the channel. You can do it by providing access to the shoe operator. Okay. Great. Thanks, fish. So although Adams told us to kind of avoid access. But there we go. I'm trying to go the other direction. I'm trying to start with the matrix. Oh yeah, which is what this is. Got it. And then Molly's got an example. Okay. So what this is going to do is it's going to be a three by three matrix containing one, two, zero, three, zero, zero, four, five, six. And I don't think these parentheses are needed. Are they Molly? Hey. Well, this looks nice and easy. And other languages, I think we'd call this head. Oh, or if you do negative, it's tail. I like that. I love that they don't create more functions and needed. Why not just use negative? Okay. So that just takes the first end characters or the last end characters. Okay. So let's create a matrix of three by four of 12. And why do they go straight to the hard one? Let's just start with, okay, what if we do that? And let me print this out. Shall we? What's the keyboard shortcut for quad? Oh, there it is. Vertical bar. Wait, I'm confused. I thought that was, that's that. It's an L. Oh, it's an L. Thank you. All right. Great. So this is going to grab the first two rows of the matrix. Cool. And this is the first two rows in the last three columns of the matrix. So this is a nice easy way to index into contiguous sections of an array. Is everybody okay with that? So two minus three is going to be the first two rows last three columns of this bit here. All right. Well, I'm curious about what the other arrow is going to be. One other thing was taking more than the amount that was in the array. Oh, thank you. Taking more than the amount in the array. So like five five rows, for example. Okay. So I get spaces in the case. Oh, I think that's going to be called its prototype. And for the matrix. Zeroes. Okay. Again, the prototype. Cool. So yes, I think the space is the prototype for a character and zero is a prototype for a number. Okay. Is that all of that? Anything else, Paulie? Or you think that's it? Um, well, in the case of, oh, here's an example. I wanted to share. Put it in chat right quick. Thanks. Cause I feel in this behavior a bit. Odd. Not what I expected. Okay. Let's see what you've got. All right. So you've got. So the, the empty one. You're getting too many things. Wait, what? Okay. So it's, it's repeating the first one. Yeah. The first one. With prototypes. Okay. Okay. I'm not going to leave this in here because that sounds like a weird edge case that people can figure out, but that is interesting. And surprising. Much better. If I got 10% okay. Maybe too bad. If I type down here, I'm going to get the down arrow. The down arrow does the thing that you wanted to do. Oh, right. Yes, it does. Lovely. Great. Let's steal our matrix then. And it's you. Huh. Now about that. Well, that's. That's exactly as it should be. Okay. And you can also do it with an axis. Okay. And then drop. That's great. Everything except for. Wonder how close we are to finishing this till a lot of symbols we haven't done. I feel like we've done a lot. Okay. Everything except the first four. What's this? Okay. Makes sense. Everything except the last five. And it makes sense as well. Everything except the first two rows. And everything except those rows. Well, actually, I'm not sure what this is going to do. Let's see if we can figure it out. Everything except these is something of a weird shape. So what's going to happen? Oh, I see none of the top two rows. And none of the last three columns means you're left with this. So this is actually doing something. Yeah. So we get rid of all those columns and we get rid of all these rows and you're left with just the number nine. Okay. Those sound like very useful things to know about. Anything else to chat about before we. Go. Be productive day. All the symbols. I will encourage other people to try to do the competition. So rather did you use the arrows much in your competition? A lot. A lot. Great. Yeah, I feel like. It's the competition available again. You're very hard to hear, right? I think it should be better now. Oh, yes. Thank you. Sorry, sorry. So I wonder if the competition is back available again for, for this year. The 2022. I don't know, but based on the test case, the competition is available in the screen. You should be able to try working on it as well. Perfect. Yeah. But, but when you submit, you will find out they actually have more edge case in the test. So you get your head around it. And I think that's the previous years. One says Sir, I just mentioned before. And there are write ups on the forums. They are awesome. So, you know, combining like trying to do the competition with looking at the forums after a couple of tribes. That that sounds like a really nice way of learning this stuff. Yeah. Even I don't see a way to, I don't see a way to see the current years ones because it's got tells you. I don't see it on the web page. It might be. Yeah, I might have to wait. But last time they have the PDF download, maybe I can post it. Yeah, please do because I don't see it. Yeah, and then you can just based on the test case. They have four of test case and then you, at least you have some parameter to work on. Or alternatively, maybe like post. I don't know. I don't know. I don't know. Yeah. Yeah. That'd be cool. Okay. Thanks. Bye everybody. So much. Good one. Bye. Yep. Yeah.