« first day (967 days earlier)      last day (54 days later) » 
03:00 - 22:0022:00 - 00:00

3:24 AM
Almost have it
thag←((0=(-/¨×⍨)))(,(⍳3⍴⊢)) ⋄ ⎕←thag 5
⎕←thag 5 ⋄ thag←((0=(-/¨×⍨)))(,(⍳3⍴⊢))
 
@Sherlock9
VALUE ERROR
 
Okay thought I almost had it except I need to get it to replicate the Boolean matrix
Except it's looking like it's going to be a problem
⎕←(⊢/⍨(0=(-/¨×⍨)))(,(⍳3⍴⊢))5
 
@Sherlock9
LENGTH ERROR
 
Length errors all the time
⎕←(⊃¨(0∘=(-/¨(*∘2)))⊆⊢)(,(⍳3⍴⊢))20
 
@Sherlock9
┌─────┬─────┬───────┬──────┬──────┬───────┬───────┬───────┬───────┬────────┬───────┬────────┐
│3 5 4│4 5 3│5 13 12│6 10 8│8 10 6│8 17 15│9 15 12│12 13 5│12 15 9│12 20 16│15 17 8│16 20 12│
└─────┴─────┴───────┴──────┴──────┴───────┴───────┴───────┴───────┴────────┴───────┴────────┘
 
3:31 AM
⎕←((0∘=(-/¨(*∘2)))⊆⊢)(,(⍳3⍴⊢))20
 
@Sherlock9
┌───────┬───────┬─────────┬────────┬────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬──────────┐
│┌─────┐│┌─────┐│┌───────┐│┌──────┐│┌──────┐│┌───────┐│┌───────┐│┌───────┐│┌───────┐│┌────────┐│┌───────┐│┌────────┐│
││3 5 4│││4 5 3│││5 13 12│││6 10 8│││8 10 6│││8 17 15│││9 15 12│││12 13 5│││12 15 9│││12 20 16│││15 17 8│││16 20 12││
│└─────┘│└─────┘│└───────┘│└──────┘│└──────┘│└───────┘│└───────┘│└───────┘│└───────┘│└────────┘│└───────┘│└────────┘│
└───────┴───────┴─────────┴────────┴────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴──────────┘
 
 
2 hours later…
5:36 AM
@Sherlock9 How about:
⎕←⍸0=-/¨×⍨⍳3⍴20
 
@Adám
┌─────┬─────┬───────┬──────┬──────┬───────┬───────┬───────┬───────┬────────┬───────┬────────┐
│3 5 4│4 5 3│5 13 12│6 10 8│8 10 6│8 17 15│9 15 12│12 13 5│12 15 9│12 20 16│15 17 8│16 20 12│
└─────┴─────┴───────┴──────┴──────┴───────┴───────┴───────┴───────┴────────┴───────┴────────┘
 
@Adám Okay a) that's amazing and b) how does figure out that the left argument needs to be ⍳3⍴20?
And also I can't seem to turn this into a train without doing the parens dance again
 
@Sherlock9 a) directly derived from yours b) I didn't ravel (,) ⍳3⍴20; it just uses the current shape, but ravels its own result.
 
OHH The monadic ⍸ gets the indices we need! It doesn't need the original array! That's so cool!
 
5:52 AM
@Sherlock9 (⍸0=(-/¨∘×⍨∘⍳3⍴⊢))20 but you could post a full program: ⍸0=-/¨×⍨⍳3⍴⎕
 
@Adám Right, I'd forgotten about using a full program. Glad to know how the train could work though. Was having a devil of time trying to figure out where parens were needed and how forks worked and so on
 
 
5 hours later…
10:46 AM
@Adám this is brilliant - had no idea it was tucked away. It’d be cool if it were more streamlined on mobile
 
11:01 AM
Hmm 1 Unable to open session file " /MiServer/ServerData/TAS000085.dcf"
 
@chrispsn that occurs sometimes for some reason. try clearing cookies/opening in private window/whatever other ways there are to disassociate previous state there is in browsers
 
 
4 hours later…
ngn
3:25 PM
@Adám that train requires parentheses around ×⍨. it can be shortened with -/¨∘(×⍨) -> -.ר⍨ (still longer than a full program)
another -1 byte: (⍸0=⍳-.ר⍳)3⍴⊢
 
 
3 hours later…
6:31 PM
⎕←{⍵,⍣(100>+/⊃p)⊢p←⊂9+? 89 89}⍣{5=≢⍺}⊢⍬
 
@TessellatingHeckler
┌─────┬─────┬─────┬─────┬─────┐
│82 45│24 43│11 38│75 12│51 10│
└─────┴─────┴─────┴─────┴─────┘
 
cool; those are pairs of 2-digit numbers (10-99), where the sum adds up to a 2-digit number. I first wrote it with an outer-product which worked fine but generates a lot of numbers to get a small result. This attempt is to write it in a loop, generating random pairs over and over until there are five pairs
except, the first pair doesn't fit the criteria, and gets included regardless
and I can't see why; trying to use (100>+/⊃p) as a conditional-append if the sum of the pairs is less than 100, trying to start with Zilde as an empty vector to catenate onto, but the first pair gets into it always
 
⎕←(⊢,99-⊢)¨9+?5⍴90
 
@Adám
┌─────┬─────┬─────┬─────┬─────┐
│42 57│11 88│16 83│82 17│55 44│
└─────┴─────┴─────┴─────┴─────┘
 
⎕←(⊢,∘?99-⊢)¨9+?5⍴90
 
6:39 PM
@Adám
┌────┬────┬────┬────┬─────┐
│92 3│88 9│82 9│77 3│53 13│
└────┴────┴────┴────┴─────┘
 
a much neater design indeed, and a good update so they don't all sum to 99 :)
 
@TessellatingHeckler Hold on, it still gives 1-digit numbers. Working on it...
⎕←9+(⊢,91-⊢)¨?5⍴90
 
@Adám
┌─────┬─────┬─────┬─────┬─────┐
│46 63│68 41│81 28│18 91│68 41│
└─────┴─────┴─────┴─────┴─────┘
 
@TessellatingHeckler I think that's it. Ah, shorter:
⎕←9+91(⊢,-)¨?5⍴90
 
@Adám
┌─────┬─────┬─────┬─────┬─────┐
│76 33│93 16│90 19│46 63│40 69│
└─────┴─────┴─────┴─────┴─────┘
 
6:43 PM
how does the train parse in (⊢,91-⊢) ?
 
⎕←(⊢,91-⊢)
 
@Adám
┌─┼────┐
⊢ , ┌──┼─┐
    91 - ⊢
 
huh, I didn't realise constants could be in one like that
 
Yeah, they can take the place of the left tine of a 3-train only.
 
thought it would have to be 91 jot minus to make a function
but why does my power conditional ignore the condition? :eyes:
 
6:49 PM
@TessellatingHeckler Because it is that is conditionally prepended, not p that is conditionally appended.
⎕←{p,⍣(100>+/⊃p←⊂9+? 89 89)⊢⍵}⍣{5=≢⍺}⍬
 
@Adám
┌─────┬─────┬─────┬─────┬─────┐
│25 54│68 22│30 62│24 58│39 22│
└─────┴─────┴─────┴─────┴─────┘
 
@TessellatingHeckler No need to use , btw:
⎕←{⍵,(100>+/p)/⊂p←9+?89 89}⍣{5=≢⍺}⍬
 
@Adám
┌─────┬─────┬─────┬─────┬─────┐
│82 15│34 35│29 20│49 16│23 23│
└─────┴─────┴─────┴─────┴─────┘
 
hmmm, is it conditionally prepended Because of the right to left execution order? Should I generally think of catenate as a prepend rather than an append? or is that unrelated?
 
@TessellatingHeckler When reading APL right-to-left, then yes, , prepends its left argument.
 
7:18 PM
and then no power, just replicate
which doesn't break, because
⎕←⍴⍬,⍬,⍬
 
@TessellatingHeckler
0
 
that's not inserting "nulls". Cool. Thank you Adám :)
from http://help.dyalog.com/14.0/Content/Language/Primitive%20Operators/Power%20Operator.htm
> In particular, g may be Boolean 0 or 1 for conditional function application.

I did not think of replicate at all, here
 
 
1 hour later…
8:30 PM
I have come to learn APL!
 
@MilkyWay90 OK, where do we start? You know Python. How are you with mathematics in general?
 
@Adám I'm at the Geometry - Algebra 2 level
so
not good
 
Not a problem. You know basic arithmetic, so let's begin there.
 
ok
Should I use TIO Dyalog APL?
If so which version?
 
If TIO, use Dyalog Unicode, but you can also use TryAPL.org or even the chat bot for now.
 
8:33 PM
ok
 
But before we even get there: The first thing you need to realise is that APL is different. Don't think of it as a programming language (yeah, no pun intended), but rather as a better maths.
 
⎕←⍴⍬,⍬,⍬
@Adám Okay
 
We'll write mathematical formulas to get the result we want.
@MilkyWay90 You need to use four or more leading spaces, not backticks.
 
@Adám Okay
 
@MilkyWay90 Also, the bot doesn't pick up on edits. Sorry.
 
8:35 PM
ok
⎕←⍴⍬,⍬,⍬
 
@MilkyWay90
0
 
It works!
 
Indeed. Maybe let's do FizzBuzz. That's always fun.
 
Alright
 
But first some ground rules. You know syntax like 2+3 and -4 and 5×6 from traditional mathematical notation (TMN).
 
8:36 PM
@Adám Okay
 
Now, TMN has lots of strange notations that don't fit well on a line of code, like 2³ and ³/₄ and sin²(x) etc.
 
Yeah, I get that too
 
APL tries to stay true to its mathematical roots while harmonising all syntax.
 
ok
So Jelly's syntax was based off of APL/J's syntax, correct?
 
So generalising from the most basic mathematical operations, like 4-3 and -5, APL has all functions be either infix or prefix.
@MilkyWay90 Yeah, but Jelly it is more complicated, methinks.
 
8:39 PM
ok
Infix means in the middle of, right?
 
Right.
 
ok
so for dyadic functions, it could be like 4D2
 
A function can do two different thinks when called monadically (f x) or dyadically (x f y), but of course, often you only need one use.
@MilkyWay90 Yes, except you'd need spaces, as multi-char names like D2 are allowed.
 
@Adám Ah, I see
 
Most primitive (that means built-in) functions (that's what we call then, not operators, which in APL is something else), can be used in two ways, like -.
 
8:41 PM
(was just making an example for any language with infix operations, didn't know there was a D builtin in APL)
 
@MilkyWay90 Oh, there isn't a D built-in, APL has no reserved words, but the user can define D.
 
@Adám What does the -. mean?
 
@MilkyWay90 Just - as the period was the end of my sentence :-)
 
@Adám Okay
- means subtraction, right?
 
@MilkyWay90 When used dyadically (between two args), yes.
 
8:43 PM
ok
 
Monadically (prefix) it is of course negation.
÷ is division and without left argument it is reciprocal, i.e. 1÷x
 
Okay, so a primitive function has different meaning if it's prefix (1 arg) or infix (2 arg)
 
APL also has a division-remainder function, which is | as in:
⍞←3|11
 
Are there any triadic functions?
 
@Adám 2
 
8:44 PM
hmm
I see
 
Note the order of arguments, not like ÷.
 
So you send the remainder of 11 and 3 to STDOUT?
 
@MilkyWay90 Operators can have up to four distinct inputs, but it is normal to give multiple arguments as a list.
@MilkyWay90 STDERR in this case ⍞← whereas STDOUT is ⎕←
 
@Adám Okay, I see
 
@MilkyWay90 You know about mapping, right?
 
8:46 PM
@Adám like map in python?
mapping a primitive function to a list?
 
@MilkyWay90 Yes. APL does that automatically:
⍞←1 2 3|11
 
@Adám Okay
 
@Adám 0 1 2
 
⍞←9 6 3÷3
 
@MilkyWay90 3 2 1
 
8:48 PM
So now we can take a number, say 42 and check its division remained when divided by 15 and 5 and 3:
⍞←15 5 3|42
 
@Adám 12 2 0
 
Wow, cool
Is there a divmod?
 
@MilkyWay90 No, but it is super easy to construct it yourself.
 
⍞←15 5 3÷42
⍞←15 5 3|42
 
@MilkyWay90 LENGTH ERROR
 
8:50 PM
Ah
 
@MilkyWay90 Ah, you can't give the bot multiple lines like that.
 
It's like a repl?
 
⎕←15 5 3÷42 ⋄ ⎕←15 5 3|42
 
@Adám
0.3571428571 0.119047619 0.07142857143
12 2 0
 
oh cool
 
8:51 PM
@MilkyWay90 Normally, people use APL in a repl, but the bot is very simple.
It ignores newlines, but it does handle as statement separator:
⎕←15 5 3÷42 ⋄
⎕←15 5 3|42
 
@Adám
0.3571428571 0.119047619 0.07142857143
12 2 0
 
Yay, readable code for the win!
br right back
 
np, ping.
 
@Adám Okay, I am back
 
OK, let's look an an other issue in TMN (and many programming languages)
 
8:54 PM
ok
 
TMN has a complicated (and at times ambiguous/undetermined) order of execution. Programming languages tend to have deterministic order of execution, but the rules can be very long.
APL does away with this completely.
 
ok
sort of like Jelly rules being long with chain commands and all that
 
Right, but APL simplifies f(g(h(x))) to f g h x and draws the conclusion that a function's right argument is the entire sub-expression on its right, until the end of the statement.
 
I see
 
So, A-B+C is A-(B+C)
 
8:56 PM
ok
and B * C + B would be B * (C + B)?
 
And 2×4-3 is 2×(4-3), i.e. 2
⍞←2×4-3
 
@Adám 2
 
So the order of operations are simpler
Instead of BIDMAS / PEMDAS
 
Exactly. It may seem strange at first when it comes to familiar thinks like + vs ×, but you get used to it quickly, and begin to appreciate the simplicity.
 
8:58 PM
ok
 
Next step. Have you ever heard of the Iverson Bracket?
 
nope
but I can use Google
Oh wait i know it
just didn't know the name
 
It is a quite simple thing in TMN, basically, if p is a predicate, then [p] gives 1 if the predicate is true and 0 if not.
 
Oh, I mistaked it for something else
 
In APL, the Iverson Bracket is always implied in all predicate functions. In other words, APL uses 1 and 0 for true and false.
 
9:00 PM
Okay, I get it now
 
⎕←5>2 ⋄ ⎕←4≥4
 
@Adám
1
1
 
@Adám so I assume that if and while use 0 and 1 for falsy and truthy?
 
@MilkyWay90 Yes.
 
9:01 PM
And of course, = is just like any other comparison function:
⍞←1=3 1 4 1 5
 
@Adám 0 1 0 1 0
 
(We use for assignments. ⎕← "assigns" to the console. is a stylised console.)
 
ok
D←5 ⋄ ⎕←D≥4
bot?
 
@MilkyWay90 You need a leading for the bot to react. Otherwise it doesn't know if you are speaking to it.
 
⋄D←5 ⋄ ⎕←D≥4
 
9:03 PM
@MilkyWay90
1
 
Ok, I think I see
 
@MilkyWay90 OK, challenge time. I want to know if 42 is divisible by 15 and 5 and 3 respectively.
 
Divisible?
 
@MilkyWay90 Yes, evenly divisible, no remainder.
 
ok
⋄42|15 5 3 == 0
 
9:05 PM
@MilkyWay90
SYNTAX ERROR
 
⋄⎕←42|15 5 3
 
@MilkyWay90 ==‽ and remember the order of execution.
 
@MilkyWay90
15 5 3
 
@MilkyWay90 Also, the order of arguments in |
 
ah whoops
⋄⎕←15 5 3| 42 = 0
 
9:06 PM
@MilkyWay90
0 0 0
 
@MilkyWay90 What does | see as its right argument?
 
Oh
I'm so used to Python
 
Yes, time to unlearn.
 
⋄⎕← 0 = 15 5 3 | 42
 
@MilkyWay90
0 0 1
 
9:08 PM
Yay!
ok
 
Bravo! (the isn't necessary when the first statement does output – but these rules are just bot quirks.)
 
oh ok
I am using the apl keybindings now
 
So, now we need to find out which case we have: divisible by 15? and if not, then divisible by 5? and if not…
@MilkyWay90 Cool. Where did you pick them up?
Basically, we need to find out the location of the first 1.
 
@Adám I used it for Jelly, and I remembered them now and went back to the meta post about advertisements
 
OK, good.
 
9:10 PM
@Adám hmm
 
In other words, we need to find the index of the first 1.
@MilkyWay90 Are you familiar with the Greek alphabet?
 
nope
 
No problem. The letter is called Iota, and is used basically like an English letter I.
I as in "Index-of"
 
Indeed, you'll find it on the i key.
⍞←2 7 1 8 2 8⍳8
 
9:13 PM
@Adám 4
 
⎕ ← 0 = 15 5 3 | 42 ⍳ 1
⋄⎕ ← 0 = 15 5 3 | 42 ⍳ 1
 
@MilkyWay90
RANK ERROR
 
@MilkyWay90 Order of execution! Also, the bot won't let you have a space between and (again a quirk of the bot. In normal APL, that's fine).
 
⋄⎕← 1 ⍳ 0 = 15 5 3 | 42
 
@MilkyWay90
RANK ERROR
 
9:14 PM
@DyalogAPL RANK ERROR because you're trying to search a number.
@MilkyWay90 Ah, but takes what you're looking for on the right, and the haystack on the left.
Luckily, APL has parentheses just like TMN.
 
Was just about to ask
lol
⋄⎕ ← (0 = 15 5 3 | 42) ⍳ 1
 
@MilkyWay90
3
 
Also, what's the keybinding for iota
 
@MilkyWay90 i
 
9:16 PM
You're pressing backtick first?
 
Oh, backtick
 
How did you enter the other symbols?
 
copypaste
 
I thought you used the language bar's keybindings?
 
I'm talking about before I installed it
 
9:17 PM
Oh.
Any way, since 42 is divisible only by 3, it is a Fizz
 
We need the index to pick from FizzBuzz and Buzz and Fizz and the number itself.
⋄ N←42 ⋄ ⎕←'FizzBuzz' 'Buzz' 'Fizz' N
 
@Adám
┌────────┬────┬────┬──┐
│FizzBuzz│Buzz│Fizz│42│
└────────┴────┴────┴──┘
 
APL allows you to put all kinds of stuff next to each other to form a list, just like we did with simple numbers.
No type restrictions in APL :-)
 
9:19 PM
so we need 0 for fizz buzz, 1 for buzz, and 2 for fizz?
 
Except, we're using 1-based indexing, yeah.
Also, if doesn't find what you're asked for, it gives you the index beyond the end:
⍞←3 1 4⍳1 2 3 4
 
@Adám 2 4 1 3
 
oh ok
 
This is really useful for having "default" values after lookup.
So if the input number is not divisible by neither 5 nor 3, we'll get 4, and pick the number itself as result.
Now we just need the picking function. It is index⊃list:
 
9:22 PM
⍞←2⊃'hello' 'how' 'are' 'you'
 
@Adám how
 
What I don't get is how to differentiate getting a 0 mod 3 vs mod 5
like how do you make mod three the number 3 and mod 5 the number 2
 
@MilkyWay90 Both will give a 1 (true) but in a different position, so we just look for the first 1.
 
for the list tht you mentioned above
 
@MilkyWay90 I'm not sure I understand. Do you mean:
⍞←3 5|3 2
 
9:24 PM
@Adám 0 2
 
⋄ N←42 ⋄ ⎕←'FizzBuzz' 'Buzz' 'Fizz' N
 
@MilkyWay90
┌────────┬────┬────┬──┐
│FizzBuzz│Buzz│Fizz│42│
└────────┴────┴────┴──┘
 
that list
0 mod 5 would be 2 (the index of "Buzz")
 
So?
 
and 0 mod 3 would be 3 (the index of "Fizz")
How do we make it from 0 mod 5 = 0 to a value of 2
like an if
 
9:26 PM
We look for the index of the first 1.
⎕←15 5 3|0
 
@Adám
0 0 0
 
oh i see
ok
 
Anyhow I don't think FizzBuzz is defined for 0 ;-)
 
Ohhhh I get it, thanks for explaining
 
So, dare you put it all together now?
 
9:27 PM
I can definitely try
 
You can use tryapl.org to experiment.
 
⋄ N←42 ⋄ 1 ⍳ 3 5 | N ⊃'FizzBuzz' 'Buzz' 'Fizz' N
 
@MilkyWay90
INDEX ERROR
 
oof
 
@MilkyWay90 Almost. You just need to get the argument order of right, and use parens when needed.
Also, the bot won't print the result without ⎕←
 
9:32 PM
ok
 
TryAPL doesn't need (or even allow) ⎕← btw.
 
Yeah, I'm trying TryAPL rn
 
You can make a permalink when it works as you want.
 
ok
So we are defining a num N and outputting fizz, buzz, fizzbuzz, or N?
 
@MilkyWay90 Correct.
 
9:34 PM
ok
 
@MilkyWay90 Any success?
 
@Adám Not so far
But I also had to work on something else
 
@MilkyWay90 OK, let's take it step-by-step.
 
so didn't have as much time
 
⋄ N←42 ⋄ ⎕←15 5 3 | N
 
9:45 PM
@Adám
12 2 0
 
⋄ N←42 ⋄ ⎕←(15 5 3 | N) ⍳ 1
 
N←2 ⋄ ((3 5 | N) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' N
 
@Adám
4
 
what I have so far
 
@MilkyWay90 3 5 should be 15 5 3 and you're missing the 0= part.
 
9:49 PM
⋄ N←15 ⋄ ((0 = 15 5 3 | N) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' N
ok
I now realize what I was doing wrong before
 
Cool. Nice job!
@MilkyWay90 Good. We all learn from our mistakes (hopefully).
 
Is there any range?
 
@MilkyWay90 As in generate numbers from 1 to N?
 
yes
a list
 
Remember that is of index-of when used with two arguments. With a single argument, it is "indices-until":
⍞←⍳10
 
9:52 PM
@Adám 1 2 3 4 5 6 7 8 9 10
 
@MilkyWay90 Let's make a function out of that expression!
 
The simplest to use function is simple enclosing an expression in curly braces and using to mean the right argument. is the rightmost letter in the Greek alphabet.
 
i tried it, but it gave a 1 Unable to open session file " /MiServer/ServerData/TAS000085.dcf"
oh ok
 
@MilkyWay90 Oh no, TryAPL hit a snag. It happens. Not your fault.
 
9:53 PM
oh ok
⋄ D←((0 = 15 5 3 | ⍵) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' ⍵ ⋄ D 1 2 3 4
 
@MilkyWay90
LENGTH ERROR
 
@MilkyWay90 Needs braces.
 
And ⎕← for the bot
⋄ D←{((0 = 15 5 3 | ⍵) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' ⍵} ⋄ ⎕←D 42
 
@Adám
Fizz
 
9:54 PM
⋄ D←{((0 = 15 5 3 | ⍵) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' ⍵} ⋄ ⎕← D 100⍳
 
@MilkyWay90
LENGTH ERROR
 
oh whoops
 
But anonymous functions used inline are fine too.
 
⋄ D←{((0 = 15 5 3 | ⍵) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' ⍵} ⋄ ⎕← D ⍳100
 
@MilkyWay90
SYNTAX ERROR
 
9:55 PM
Uh, you used postfix. No such thing in APL.
 
oh meant prefix
⋄ D←{((0 = 15 5 3 | ⍵) ⍳ 1) ⊃ 'FizzBuzz' 'Buzz' 'Fizz' ⍵} ⋄ ⎕← D ⍳100
 
@MilkyWay90
LENGTH ERROR
 
Ah, because we need to apply the function to each element.
Otherwise it will just try to substitute with the entire list.
 
I thought mapping was enabled by default
oh
i see
 
It is for arithmetic functions, but if it was for user-defined functions, it'd be hard to negate when you actually want to take a list.
This brings us to the concept of APL operators.
 
9:57 PM
ohh
 
APL operators take one or two operands (not arguments) and use them to derive a new function. In the simplest case, a so-called monadic operator takes a single function as operand and derives a related function.
E.g. + is plus. / is an operator that makes a dyadic function into a monadic fold. Also, monadic operators are post-fix to their operand:
⍞←+/3 1 4
 
@Adám 8
 
⍞←×/3 1 4
 
@Adám 12
 
03:00 - 22:0022:00 - 00:00

« first day (967 days earlier)      last day (54 days later) »