 Okay. You can see my screen. Okay. Great. I thought we might do this one because I actually know what it is. And it's to do with functions. Assuming I got them the right way around, I always forget which triangle is which. One question is, how do I write it upside down triangle? Is it G? Oh, that's odd. You haven't turned on your keyboard. I guess so. Yeah, I didn't even know Alt-G was bound to something. Oh, it's Google. Google Drive seems to have stolen that hot. Wait, that's Control Alt-G. Well, I don't want to hotkey anyway. Save. There we go. Why do I keep getting this? It may help now, I wonder. That's strange. Maybe, girl. All right, upside down triangle. Actually, that might only be in here. It's for recursion. So maybe we'll try APL Wiki then. Okay, it's called Dell. Resembling an inverted delta represented by the nabla. So we'll call it dell slash nabla. That's used to recursion. I think there'd be something about recursion in here. Oh, here we are. Let's go to this one. Okay, so there's actually a couple of things to note here. Because we haven't done guard expressions either. So let's do that first. Guard expressions. Okay, how do we write diamond? Alt-Baptic with my keyboard. Okay, so factorial is defined such as the factorial of omega equals factorial of omega minus one. And so here's an example of a factorial if we wanted to write it ourselves. And the thing that's new here is this thing here. It's got a guard expression. And it checks whether this is true. And if it is, then it exits with this return value. So in this case, factorial of five, this is not true. So then this is a statement separator. So it said it's going to return five times factorial of four. And then factorial of four will do the same thing. It'll be four times factorial three and so forth until it gets to factorial of one. And this will be true. So that's our base case. It will return one. And that's why we get this. One thing I'm curious about is can you... No, you can't. I think you want to use each that you may work. Yeah. Yeah. Probably if we're somewhere to do this as a tacit function, maybe we wouldn't have the problem. Not sure. Okay. So does that make sense to guard expressions? So what if we wanted to define it and use it? So if we wanted to define factorial and then immediately use it. That's not going to work because this function doesn't have a name. So you need to be able to refer to the current function. So Dell simply refers to the current function. So that means call myself. Does that make sense? But that is different from the selfie, isn't it? Sorry. Different from the selfie. Yes. So selfie... Selfie simply f... Selfie x simply equals x fx. For example, times... Oops. Times selfie three equals three times three. So this line is identical to this line. So this is a function. So we're calling it with... Let's start by calling it with two. Okay. So calling this function with two. I make it equals two. It's not less than or equal to one. So skip this. So it's equal to two times the current function of one. This is the current function. So then it goes to do this with one. Yes, that is less than or equal to one. So it returns one. So now we've got... This is del of one is one times two equals two. So it's exactly the same as the factorial one. I've just replaced the word fact with del. In Python, for example, if you want to create a recursive function, you can't create a recursive lambda. There's no way for a lambda to call itself. But in APL, you can create an anonymous recursive function. Does that make sense? So we could also... Of course, define this as fact if we wanted to. Like, we don't have to make it anonymous. So it's still work fine. Okay. All right. Anyone you suggest we do next? Or should we just randomly pick something? I think maybe it can go through all the boxes together. Okay. Do you have any sense of what the boxes are vaguely about? No. A second one. The second one? Yeah. I think that is the curve. Sorry? I think that is the pinout, the second one. But the rest, I don't know. Is that this quad? Yeah. Cool. Okay. We've already done quad. So quad with a little dooby at the top. I'm guessing they don't have something called quad with dooby at top. I don't see it. Maybe we'll search the wiki or something. It's purple rather than blue, which makes me suspicious. Maybe it's not a thing. Quote quad. Oh, that's the name of the newsletter. It's named after the glyph. Quote quad. Which can be used to print text. Oh, okay. So quad is standard output. And quote quad is standard input. I wonder how one would use that in APL. Probably quite useful. Oh, hi, Molly. Oh, hello. Yeah, Jupiter input input through. Through it is not supported. Okay. Okay, but we could do us like get something from student in a script or something. Yeah, I think if we did a script that would be supported here, they're just using it as a normal variable, I guess. So they, it's the array is displayed without the line ending. Oh, that's interesting. So this is called quote quad and it's written left curly. Quote quad. So print without character turn. Wonder if this is going to work. Okay. Fine. All right, I'll just copy this then. So basically, even though it's not going to work, I would do. Okay. No worries. Right. What about this one? Quote box with two dots. A variant operator. What on earth does that mean? Okay. Doesn't seem like this is used for normal APL. So probably not really part of our notation. Although I guess it's useful to know what it's talking about. So I think knowing how to use Jason's nice. How do we create this character matrix? So this is, I guess we could just go one, two, three, four, five, six. Two, three, four, five. Oh wait, do we use double quotes or single quotes? We use single quotes. Okay. So if we did one, two, three, four, five, six. So four rows of six columns. Jay, I slightly got it wrong. One, two, three, four, five, six. And a space. Oh, Jeremy, I saw at the mention using the, um, um, square back and then D input for multi line, but I haven't tried in Jupiter. Maybe we can try. Hang on, hang on, hang on. I'm not quite sure. Let me, let me come back to you. Oh, I see that one's got a comma in that one doesn't. Okay. So we can do six. And then you can tell me about this multi line idea. Okay, sorry, Serada, what can I do? I put it in the chat. Maybe you can copy at the, at the top of the multi line. Oh yes. Okay. So, okay. And do you think I might then be able to like, do something. Yeah. With trade. Okay. Okay. So we can do Jason to a matrix. It's funny they're using this rather than the usual quad gets thing. I think. We had font issue. Never mind. Um, um, right. So sing question mark. And what's the name of the symbol? It's just called variant, is it? All right. So if we search for Jason, these are called system functions. And so we could use quad gets here. Um, quad or keyboard shortcut is quad tick back tick. I think that's diamond. Yeah. Forget that. All right. We're definitely getting to some of the weird ones, huh? Okay. So that's that one. Quad diamond. Oh, this is stencil. I think this is what we can use for like convolutions and stuff. Okay. And how do we write that? Maybe percent. Oh hi, Isaac. Hey, it's working off fast. And I totally lost track of the last couple hours. So fast tackle can do that to people. I looked up and I was like, oh, it's halfway through the session. Shoot percent is wrong. Oh yeah. No, that's part of our. No. None of those. Honestly, you haven't missed much. We've only been doing weird ones. Quickly. An operator. Yes, it does sound a lot convolution. A lot like a convolution. It's going to be applied to possibly overlapping rectangular views. Of the right. Yes. Also for cellular automata. It's back to a dictionary of APL, which we saw the other day. Okay. So we're going to pass it to Rose. The first row is the dimensions of the rectangles. And the second is the movement, which I guess is like this dried. Okay. This is the. Rank. Tally row is rank. The right argument. Has our operand has. Rank Y columns. Okay. So you're going to be saying for each access. What's the. Kernel size at stride. As you can use fewer. We'll worry about that special case later. Okay. This dried is defaults to one. Okay. So this is starting. Okay. This looks like a good way to do it. Okay. So we've started with. Three by four. Matrix. The numbers from one to 12. And. The function we're doing is. This is in close, isn't it? Yes. Okay. I'm confused as to why they used a D fund for it. It's interesting. What's going on with the D fun. It's making it's ensuring it's monadic. I guess it's what it's doing. It just seems like a really. Clunky way to do that. Yeah. Let's come back to that. And. The function we're doing is. This is in close, isn't it? Yes. Okay. I'm confused as to why they used a D fund for it. Interesting. What's going on with the D fun. It's making it's ensuring it's monadic. Yeah, let's come back to that. I mean, it should know it's monadic anyway. There's nothing on its left. Well. Maybe stencil put something on its left. Okay. Just a tick. I got to go. Check on my daughter. You guys solved it now. Without the nest, it doesn't keep the shape of the. Input so like it. It comes kind of a list. I don't know. I don't know how I feel so far. Can we add the assignment to the material lives? You know, both with the D fund. And then without. So if we do the. Left arrow to materialize. Oh. And then. Yeah. Sure. Quad gets. I don't think I need these parentheses, but. I guess I meant. Right. Between the D fund. And the stencil. So then we can see what is going into the function. And then if we take away the D fund, we can see what's going into the enclose. Okay. I don't know if that makes sense though. I'm not sure if it does, right? Because the thing on the left of the stencil is. The function. That's right. Which is a D fund. And we do kind of know what it is because we can see it's been printed. Oh, you know what we could do. Is we could do alpha comma. Whoa, what is that? Something else running power toys. Let's try this. Oh, it's. That thing. Screenshot program. Close that too. Can we use the statement separator to enclose. Omega and material and print alpha. Or. Do two statements in that defense. Okay. Yes. So we are getting alphas. Which presumably this documentation will tell us. So F. F is invoked diatically in the vector left argument indicates. The number of fill elements. That's useful. Okay. So you can see that for this first one, we've got fills along the top and left. Hence the one one. And then for the next one, we've got to fill along the top only. Hence the one zero. And the fourth one. Yes, it's the top right. Hence one negative one. Cool. I'm still trying to think of the. Convey, you know, the taciti way to just turn something into a. Monadic function. Composition. We could do. Okay. Top is. J. Yeah. It's kind of like a big job. Makes sense. And then. Right. Oh, I've got a point in the wrong direction. Oh, I see. That's right. There we go. So that's. First of all applies. This function to alpha and omega. And then it applies this function. Which is obviously much uglier than the. Defund version they've already got. Okay. So. This is getting a three by three. Section. Of this array. And passing it to this function. And so if we. Wanted a stride two version of that. We could say. Create something. Which would be a two by two. Matrix. Where we're doing a three by three. Convolution with a two by two stride. That's cool. If there's some way to get nice. Images and stuff on to. APL Jupiter notebooks. It would be cool to do like just a simple Gaussian blur kernel or something. To display this. If anybody feels like. Trying that out. Images are. To be the way that was recommended to get images and the stick convert your images beforehand. The bit maps and then loaded them. Okay. That's kind of a. There's a section on images in the. The mastering dialogue APL PDF that I haven't gone through yet, but. It's going to look there, but. Well, JPEG is zero results. That's not good. Yeah. Kind of everyone at PNG is the same, but pretty much. There's a Mac PNG. There's a bit map. Oh no, you can use GIF or PNG. It's working right, but. Yeah, it seems like there's, there's a lot of. It's been several projects where people do like neural nets on images using men's. And. I'm not fully sure the format that they're in. They're behind a. Yann LeCun. Yann LeCun's website, but it's. Password protected so I can't actually see the data set, but. Oh, weird. Ask if he's willing to. Share what the data set is at some point, but it looks like it's just. Men's in some format. Yeah, maybe you should send him a message and ask. Okay. Anything else we need to know about stencil. Oh, here we go. So this is doing both. This is actually probably better. Has anybody, I presume there's an APL stencil version of Game of Life. There you go. Game of Life. Oh, Adam's 17 character solution. So here's our three by three neighborhood. And here is the count. Cool. Does this like, it's not quite linear algebra. Just not quite sure what to put this. But now I guess we'll call it other. Other lifts other function other. Operators. All right. Now what are those of these things. One of those hydrants is an execute statement. I think that's the. First one, second one, third one. I think the second one is. I beam. Oh, experimental stuff. Kind of mention that's going to come up too often. So we can definitely put that in the. Weird special bit. I think the triangle is self-reference for recursion. We've already done that. Yeah, we did that a little bit earlier just before you arrived, I guess. Okay. Do any of them look interesting? I see his execute expression. It's actually as it would be executed by the monadic execute primitive function. Oh, I see. Syntax coloring. Well, all kinds of stuff. Probability distributions at the bottom. Oh. Oh, at an SVD. I started reading from the bottom up. Yeah, it's a good idea that way. We're not overlapping. Not available on Mac. Well, I'm not on my Mac. So that's okay. I wonder why it's not on Mac though. That would be nice to have more officially available. Wouldn't it? That was it. Oh God. Why do we use chart wizards? Such a weird thing to do an APL. SVD. As at. August. 2022. Services include. SVD. Probability. Probability. Distributions. And much more. So then this is going to be our execute expression thing as well. Hydrant symbol. Yep. Call. Working a different process. Do you think it does or? Oh no, sorry. There's another one that forks a new process. Did you move to. Another. Oh, sorry. Yeah, I moved to hydrant. Oh, I see. There's a, there's a fork thing in the. I've been one is there. Yeah. Yeah. I was still reading through them. Sorry. No, that's good. Somebody told me the keyboard shortcut for this one. Hydrant. It's the. The colon. I think. Okay. Okay. That looks pretty straightforward. That's interesting. Okay. The execute expression. Seems to return the last thing. But. Printing the first thing. Is the result of the last executed sub expression. And the non-shy results of all proceeding expressions are displayed. Okay. So that's the opposite of. If you don't use it, right? Don't use the hydrant. Right. Okay. That's the same space. We haven't done namespaces. Okay. We have. Is that what this is? Yep. Okay. I'm going to put this one into the. Weird special symbol section. Not upside down hydrant. That is what I've been following it. Until I just looked it up. Just a few minutes ago. Okay. And where do I. That was not right. It's a single quote. Okay. So the only way you can tell these different. Is from the luck of the squiggly. I thought there's supposed to be dots between the four, five and six to. That must be in a different display format. Yeah. Well, it's characters versus numbers. NB depends on P P. So, so I think it's converted to a string of characters. Okay. Yep. Okay. Fixed width with a number of decimal places. Okay. Cool. I don't know if there's a way to display the spaces. Okay. I put this in the weird lift section as well. All right. I wonder if we can finish these. What does that sign do? It replaces stuff. It means at. At means at. And it's an operator. It's a dietic operator. Okay. Modetic and dietic function. You can tell because of the curly brackets on the X. Okay. This is replacing two and four with zero. Oh, or you can replace it with a function call. That's neat. Okay. So. This one's replacing two or four with zero. In a to five. And I'm guessing this is replacing two and four. Times applied to the right hand side and 10. That's very cool. The right app around identifies which items. Oh, and you can also use a function on the right hand side. That's neat. Okay. The left can be the array for placement or the function to be applied. The left argument is X. Cool. So this is a to five replacing. Oh, okay. You can also replace like one and two with two and four. No, that didn't one. Oh, yeah. This is what we're placing. Replacing two gets replaced with three and four gets replaced with one. Okay. Makes sense. Okay. There's all kinds of weird indexing things that we haven't talked about. Choose indexing or reach indexing. Okay. So this is the monadic version of the function one replaced with reciprocal on positions two and four. Oh, I like this replace odd elements with zero. So two. There are two. Modulo two. This basically means what does this mean replace odd items with themselves reversed. I don't understand how that works. I can see what it's done. But it's not applying this to each element. That's clever. Isn't it is actually applying it to the whole array. And then deciding which elements to replace. So that's some. That's quite clever by 31246. Wow. Nice. Okay. Let's move this into the main operator sections. It seems really useful. Oh, except we haven't done that one yet. Because we want them. But I will move this section out of the way because it's less interesting. Okay. That's that. All right. Right arrow. Okay. It's superseded by more modern control structures. So maybe we should not really spend much time on that. Put it in the weird section. Okay. That was easy. Ampersand. It's born. It's like in the same as like bash. Basically spawns it in the background. Ampersand. All right. Oh, but it doesn't print anything. Okay. That's. Right. I don't think it's worth spending time on particularly. So I don't think we're going to be using APLs. I mean. Parallel programming tool. Oh my God. Two more. Triangle. I don't see it. What is this thing? Okay. I don't think that's a thing about this one. No. I don't think that's a thing either. All right. We finished. Nice. Party. All right. Well. If people feel. Motivated. Then. I think we should, you know. Start adding pros. To these notebooks. If any of you decides to do that. What I suggest you do is. Open an issue. In the APL study. Repo. And say. I'm working on. Pros for this notebook. That way. People will know not to do the same notebook. To avoid doubling up. Does that make sense? Yes. All right. Is there. What do you think. Are you going to work on. For having you planned out what, what you're going to work on. What we're going to work on in the next session or are these continuing? I guess that's the first question. I think my plan is to. Yeah. Stop this week. So there won't be one tomorrow. And then. My plan is to switch to. Some NB dev sessions. Cool. Yes. APL. Yeah. Probably come back to it. After part two of the course. Yeah. In the meantime, if anybody's, you know, got a really good. Anky deck that covers all the glyphs. I would love a copy of it. So at least I don't forget what I've learned. Did you, have you been kind of keeping up with adding the glyphs to your Anky deck? I do. I have a script that I think I run it. It will be updated. I haven't been updating it. All the time. It'll probably do quite a bit of editing though, because not everything's very. Anky friendly, you know. It probably be a good starting point. Like. Yeah. Particularly if you like spits out of CSV or something like that, you could open up in a spreadsheet and then you could just like delete the rows that don't make sense or combine some or something. Important. Yeah, right now it's, it looks for, um, I was looking. We'll see how consistent the structure is, but I did handle some cases around looking for Markdown cells that are. At least a certain. Number of header, like a, maybe a header three or above and it looks for the back ticks. And the text afterwards. I think you've been pretty consistent with that. Yeah. Yeah. Yeah. Yeah. Recently it's just like, there'd be a bunch of cards that aren't necessary. And some that don't really stand alone. And some which like have too many examples and. You know. But yeah, I mean, that would be a great. Great start. We could certainly use. Yeah, that'd be cool if you could do that. Yeah. Yeah, I'll work on it. This week. Yeah. No, Harry. Otherwise we're all going to forget everything. I think that I've also got. A deck of. Keyboard shortcuts. I have one that was. That's some kind of a deck of the symbols. From the. Dialogue docs. So. Yeah. Be useful to add the mnemonics to that too. If you have time to or anybody else has time to. Oh yeah, yeah. Otherwise we're all just going to have to look them up. All right gang. Well, thanks for sticking with me to the end. You are. The tenacious ones. And yeah, anybody interested in NB dev. Probably. Probably start doing same time next week. See how things go. After next week Monday. Manda, US Tuesday. Australian. Yeah. Oh, right. All right. Bye gang. Bye. Thank you.