« first day (1813 days earlier)      last day (1138 days later) » 

00:26
@Adám Can you think a program that generates a random task (7 byte list)
Not really.
@Adám generate all 7 byte codes, execute every code, generate all 6 and less byte codes, execute, remove the duplicates, random choice
I thought of that, but the problem is that many 7-byte codes generate results that are too simple. E.g. ,,,,4,2
> generate all 7 byte codes, execute every code, generate all 6 and less byte codes, execute, remove the duplicates, random choice
Oh, remove those that have duplicated results.
00:39
@Adám yeah
How many 7-byte programs do you think there are?
@Adám at least 2k
Yes, at least that. Let's say we only use 10 APL functions and operators, plus the ten digits. That's 20 possibilities for each character. Total number of programs is 20⁷=1280000000
I'm afraid evaluating 1 billion programs might take a while.
⍳⌽≡~⌿ only
⋄15*7
@Fmbalbuena 170859375
00:42
ok, 5 byte programs
⋄15*5
@Fmbalbuena 759375
That's just under 1 million!
⎕← 20 * 5
@Adám is this fine?
@hyper-neutrino 3200000
00:44
3.2m is doable maybe
@hyper-neutrino how many time do you think this will run?
well, at least one of those programs will not terminate, probably
No, they all will.
@hyper-neutrino there is no "∇"
@Adám can you make a program that generates all possible things like 2 F 'ab' gives 'aa' 'ab' 'ba' 'bb'
@Fmbalbuena ⎕← 2(⊃(,∘.,)/⍤⍴∘⊂)'ab'
00:50
@Adám
┌──┬──┬──┬──┐
│aa│ab│ba│bb│
└──┴──┴──┴──┘
⎕← (2⊣7)(⊃(,∘.,)/⍤⍴∘⊂)'0123456789⍳⌽≡⍴⌿'
@Fmbalbuena
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──
That will be long
Indeed.
@Adám generate a program that prints a random task (without testing the full program) please.
i have to gtg now.
00:56
I don't see how I can do that.
 
6 hours later…
07:22
@Adám not if the power operator is included, right?
7 hours ago, by Fmbalbuena
⍳⌽≡~⌿ only
07:58
OK, makes sense.
08:29
How about this:
⋄ {2::'n/a'⋄4::'n/a'⋄11::'n/a'⋄⍎⎕←⍵[5?≢⍵]}'⍳⌽≡~⌿0123456789'
I am sure @Adám can make it prettier. I have no time now, but you can iterate it till it provides N good answers.
@AlexB You can catch all errors with 0::
Btw, note that your use of ? precludes the same character being used twice.
@Adám thanks
Also, you'd want to not print the generated statement until you've verified it as OK.
@Adám yes, of course, it's "deal".
@Adám as I said, I have no time now, but it can be made prettier. Perhaps an exercise for @Fmbalbuena, the instigator of this? :)
And then there's the problem that the expression might not be optimal for the result, leading to generating a task that is too easy.
E.g. ⋄ ≡⌿⌽~1 is just
08:33
@Adám 0
@Adám the error guard 0:: does not prevent the explicit print from executing, though.
I need to print the problem, then print the solution. The error guard prevents only the latter.
Oh yes, your flow is not right either. I was just commenting on your repeated error guards.
You can also use multiple error numbers in a single guard.
⋄ {0::⋄⍎⎕←⍵[7?≢⍵]}'⍳⌽≡~⌿0123456789'
@AlexB
NOT PERMITTED: Illegal token
      {0:: ⋄ ⍎⎕←⍵[7?≢⍵]}'⍳⌽≡~⌿0123456789'
     ^
You're not allowed to do ⎕← using the bot.
You need r←⍎e←⍵[5?≢⍵] ⋄ e r
08:41
Didn't know.
⋄ {0::⋄r←⍎e←⍵[7?≢⍵]⋄e r}'⍳⌽≡~⌿0123456789'
@AlexB Response looks like a 0-by-0 matrix.
That means it wasn't a valid expression.
Maybe instead of quitting, it should try again? 0::∇⍵
@Adám yes, or the power operator. As I said, I have no time now. Will do it later if @Fmbalbuena doesn't do it first.
Thanks, @Adám. It's great learning from you! You are an eager teacher.
OK, last one!
⋄ {0::∇⍵⋄r←⍎e←⍵[8?≢⍵]⋄e r}'⍳⌽≡~⌿0123456789'
@AlexB
LIMIT ERROR: Expressions must finish within 10 seconds
      {0::∇ ⍵ ⋄ r←⍎e←⍵[8?≢⍵] ⋄ e r}'⍳⌽≡~⌿0123456789'
       ^
:-)
08:47
Ha ha! I crashed the bot
⋄ {0::∇⍵⋄r←⍎e←⍵[5?≢⍵]⋄e r}'⍳⌽≡~⌿0123456789'
No, didn't crash. It just didn't allow you to keep looping any longer.
@AlexB
LIMIT ERROR: Expressions must finish within 10 seconds
      {0::∇ ⍵ ⋄ r←⍎e←⍵[5?≢⍵] ⋄ e r}'⍳⌽≡~⌿0123456789'
       ^
On my machine, I get answers faster than 10 secs. The bot is probably very slow. That's OK.
I've run {0::∇⍵⋄r←⍎e←⍵[7?≢⍵]⋄1≥≢r:∇⍵⋄e r}'⍳⌽≡~⌿0123456789' a bunch of times now, and so far it hasn't given even one viable task.
I got this and many others: ⌽⍳84012
Not very meaningful, I know, but valid.
08:51
I got the first real task!
It asked me to generate ⎕←2 2 1⍴(3⍴1) (1 2 1) (2 1 1) (2 2 1) in 7 bytes or less.
@Adám
┌─────┐
│1 1 1│
├─────┤
│1 2 1│
└─────┘
┌─────┐
│2 1 1│
├─────┤
│2 2 1│
└─────┘
Wow! Nice!
Another good task: 4 5 6 7 8 9 10 1 2 3
I use {0::∇⍵⋄r←⍎e←⍵[7?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r):∇⍵⋄e r}'⍳⌽≡~⌿0123456789'
Another: 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 1 1
But it keeps doing silly things like 957⌽⍳13
09:36
@Adám Need to decrease the weight on the digits. There are no interesting challenges coming out from 3-digit numeric literals.
...and we probably need to add space, otherwise we won't get literal numeric vectors in input.
(BTW, there's no weighted random generator in APL Cart...?)
Poor man's weighted random gen... :)
⋄ {0::∇⍵⋄r←⍎e←⍵[7?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r):∇⍵⋄e r}'⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿ 0123456789'
@AlexB
LIMIT ERROR: Expressions must finish within 10 seconds
      {0::∇ ⍵ ⋄ r←⍎e←⍵[7?≢⍵] ⋄ (1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r):∇ ⍵ ⋄ e r}'⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿ 0123456789'
       ^
@AlexB Good point.
@Adám, this is promising... we need to prune out some silly answers, like all numbers, or back-to-back rotates.
I got this ⌽⌽6 7 = 6 7 :)
More common is bignumber⌽scalar
But I got some nice (simple) ones: ⌽⍳4 1
Added some 'sanity' conditions and made the length parametric.
⋄ 5 {0::⍺∇⍵⋄r←⍎e←⍵[⍺?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)r)∨(⍺=≢' 0123456789'∊r):⍺∇⍵⋄e r}'⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿ 0123456789'
09:57
@AlexB
LIMIT ERROR: Expressions must finish within 10 seconds
      5{0::⍺ ∇ ⍵ ⋄ r←⍎e←⍵[⍺?≢⍵] ⋄ (1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)r)∨(⍺=≢' 0123456789'∊r):⍺ ∇ ⍵ ⋄ e r}'⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿⍳⌽≡~⌿ 0123456789'
       ^
@AlexB ≢' 0123456789'∊ doesn't look right. That'll always give 11
Oops
Isn't ' 0123456789'∊r evaluated first?
Yes it is. It'll always give an 11-element Boolean vector.
What I have now is this: ⋄ 5 {0::⍺∇⍵⋄r←⍎e←⍵[⍺?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)r)∨(⍺=≢(⎕D,' ')∊r):⍺∇⍵⋄e r}⎕D,' ',4/'⍳⌽≡~⌿'
@Adám oh, the other way around!
You want +/r∊' ',⎕D?
10:05
⋄ 5 {0::⍺∇⍵⋄r←⍎e←⍵[⍺?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)r)∨(⍺=≢r∊(⎕D,' ')):⍺∇⍵⋄e r}⎕D,' ',4/'⍳⌽≡~⌿'
@AlexB Did you forget to add backticks around your code (`⋄ code`)? You can edit your message and I will edit my reply.
@Adám yes
Corrected: 5 {0::⍺∇⍵⋄r←⍎e←⍵[⍺?≢⍵]⋄(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)r)∨(⍺=+/r∊(⎕D,' ')):⍺∇⍵⋄e r}⎕D,' ',4/'⍳⌽≡~⌿'
(parens not needed now)
Getting a bit hard to read. Maybe use TIO and spread it over multiple lines?
Sure
10:28
That's it for now...
challenge←{
0::∇ ⍵
k←⎕D,' ',4/'⍳⌽≡~⌿'
r←⍎e←k[⍵?≢k]
(1≥≢∪r)∨(r≡⍳⊃⌽r)∨(20<×/⍴r)∨('⌽⌽'(1∊⍷)e)∨(⍵=+/e∊⎕D,' '):∇ ⍵
e r
}
challenge 5
 
3 hours later…
13:27
@Elise Are you really not a programmer? My guess is that you'll be an awesome APLer before long.
13:43
I'm not a programmer yet, and thank you!
Oh, seems I didn't scare you off.
14:24
      ((?6×⊢)@(1∘=))⍤1↑s
2 2 3 2
5 3 5 5
2 3 3 6
6 5 2 5
4 6 2 2
5 6 2 2
      ((?∘6)@(1∘=))⍤1↑s
LENGTH ERROR
      ((?∘6)@(1∘=))⍤1↑s
Confused by this length error
⋄ 1?6 ⍝ Works fine
@FawnLocke 5
@FawnLocke f@g applies f to the vector of elements that fulfil g. ? cannot take a vector as left argument.
Ah, thanks
Even ?∘6¨ will not cut it, because it returns a vector, so you'd end up having a way too nested result.
Yeah, works fine
14:30
Instead, what you need is ?6⍨¨
Or that
 
1 hour later…
15:45
@Adám (and @Fmbalbuena), take a look at the challenge generator. It seems decent, but it cannot be made great, with just random guesses.
@AlexB Maybe it should just reject anything that has consecutive identical symbols?
@Adám Yes, much more can be done (with time), but it's tough to work around the problem that there are useless functions here and there. Often a sequence of 6 can be done with 3 by just dropping some of the functions.
@AlexB Ooh, I just got an idea. One could attach an operator to each function, checking it that function has an effect: {⍺←⊢ ⋄ r←⍺ ⍺⍺ ⍵ ⋄ ⍺ ⍵∊⍨⊂r:$ ⋄ r}
To do something better, we should make it much more "clever", i.e. comprising at least some heuristics of what makes sense and what doesn't. At some point I added the ∪ function and I got a lot of ∪⍳ sequences, where the ∪ did nothing.
@Adám Ooooh! nice!
Of course, it won't catch things like ⌽⊖ but better than nothing.
16:28
@Adám which code to generate tasks?
why challenge?
wdym?
why needs input?
1 2 3 1 2 3
⍳3,⍳3
idk
this not working, needs parens
@Fmbalbuena The number is how many characters the codes should have.
16:33
oh i understood
@AlexB but why not removing duplicates?
(correct ping)
Because it isn't feasible to generate all expressions.
@Adám oh, generate random program, if this errors then repeat?
Yes.
hmmm I can put "'"?
this makes easier to understand, "'" is a bad idea
¯2 ¯4 ¯6 ¯8 ¯10 ¯12 ¯14, 5 bytes (using '+-×⍳=¯≠')
2×-⍳7
@Fmbalbuena, you can try "challenge 4", "challenge 5". Other values tend not to work too well.
@Fmbalbuena, you can get 10 challenges of length 5 with this input: "({⎕←challenge 5}⍣10) ⍬"
16:46
challenge←{
  0::∇⍵
  d←' ',⎕D
  k←d,4/'+-×⍳=¯≠'
  r←⍎e←k[⍵?≢k]
  (1≥≢∪r)∨(r≡⍳⊃⌽r)∨(r≡⌽⍳⊃r)∨(20<×/⍴r)∨(1∊2=/e)∨(⍵=+/e∊d)∨((5>≢r)∧(1≥⍴⍴r)):∇⍵
  r
  ⎕←⎕UCS e  ⍝ remove "e" to hide the solution!
}
not working
... or an assortment with "challenge ¨ 2+⍳5"
@Fmbalbuena what did you write in the input field of TIO?
@AlexB challenge 5
@Fmbalbuena to hide the solution, just delete the "e" in front of the "r" on the last line.
@AlexB no i mean solution is e encoded
@AlexB i want to make solution encoded
@Fmbalbuena got it!
@Fmbalbuena, try this
@Fmbalbuena What? the challenge? As @Adám and I already said, it's really tough to generate clever challenges. That's why @Adám is a real person and not a bot... (ha ha)
16:58
That's what you think!
@Adám uh oh! Turing test???
Me, on the other hand…
@Adám could you teach me a bit more about APL?
Yes, of course. Welcome back!
Thank you!
17:03
So, the last thing we touched upon was the slash. We used +/ for summation and ×/ to find the product.
I didn't explain the actual concept behind this.
So we have APL functions that take one or two arguments, like - etc.
We also have an entirely different class of built-ins, that we call "operators", and / is an example of that.
You can think of an operator as a tiny factory that produces functions on demand.
You feed the operator one or two parameters (we call those operands) and it goes and creates a new function based on your parameters, and according to a specific recipe, unique to that operator.
So the recipe of / is that it takes a 2-argument function, and creates a 1-argument function which conceptually inserts the 2-argument function between elements.
Lots of words. Let's take an easy-to-understand example.
+ takes two arguments and adds them.
is an operator just like /. It takes a function, e.g. + on its left and creates a function that takes a single argument, but conceptually uses that single argument on both sides of +.
⋄ +⍨ 10
@Adám 20
@Elise Do you understand what did with + here?
@Adám +⍨ is equivalent to
Yes, because +⍨10 is like 10+10
I like to call "selfie" both because of how it looks and because it lets the argument 10 apply on itself using +, like you take a photo of yourself.
Is it possible to benchmark a function in microseconds?
17:18
@Elise I'd like you to find a neat way using to square a number, but if the above was too confusing, do let me know, and I'll try to explain it in a different way.
@FawnLocke Have a look at ⎕DT'J' with an appropriate high-res tick.
Thanks
@Adám Can you make playable Liar in APL?
Probably.
@Adám why not now?
Because I'm in a work meeting.
17:23
@Adám ok, when you finish, create one
Do you realise that it isn't nice to command people to do things for you?
Ok, i'm done
Is it ⋄*⍨2
@Elise 4
@Elise You got the idea. Multiplication is × though.
OK, here's a challenge. Given a list of numbers, how can we make every number into a 1. E.g. yourCode 3 1 4 1 5 should give 1 1 1 1 1
17:35
⋄3 1 4 1 5 ×⍨0
@Elise 0 0 0 0 0
For that specific list of numbers ⋄3 1 4 1 5 < 9 9 9 9 9 would work, but that wouldn't work for each list of numbers
@Elise 1 1 1 1 1
Ah, but you are on the right track.
I'm looking for a solution using the pattern f⍨ 3 1 4 1 5 for some function f
In other words, which operation can you do with a number on itself, which would always give 1?
I believe squaring it with 0 would do that
17:42
That's correct, but think about your < attempt above.
allows you to use the same number on both sides. Which relation would then always give 1? E.g. n f n is 1 for all n.
⋄3 1 4 1 5 <⍨0
@Elise 1 1 1 1 1
That would fail on negative numbers.
And again, you're using to flip the arguments of < (which is a functionality I've not even told you about! How are you learning so quick?). I'm looking for things like <⍨ 3 1 4 1 5 which uses only one argument.
⋄ 3 1 4 1 5 ÷ ⍨
@Elise
SYNTAX ERROR: Missing right argument
      3 1 4 1 5÷⍨
               ∧
17:52
@Elise Remember that if a function takes a single argument, that argument is on the right, so you want ÷⍨ on the left and the numbers on the right.
⋄÷⍨3 1 4 1 5
@Elise 1 1 1 1 1
Very nice.
I will have to get going now, but thanks a lot!
Sure. See you around!
18:51
⋄=⍨3 1 4 1 5
@MasterQuiz 1 1 1 1 1
That's what I had in mind.
@Adám In 7-bytes? 003⌽⍳10
"Good", as in not utter garbage, like 1
@TryAPL Did someone put a ⎕DL somewhere?
@Adám It was because the other tasks aren't so obvious.
18:56
⎕←'Hello @Adám'⊣⎕DL 10
@TryAPL Hi, how are you?
@Adám Hello @Adám
@Adám But before noone executed some code. It just took control over the entire site
It is known to have a temper.
Is there a reason why it isn't possible to execute some System commands on TryAPL? If so, and if it's so expensive to load by default some functions, isn't it a good idea to put a link to a prebuilt TryAPL, with functions like cmpx (this is what I'm wishing to have in this moment, but there can be some other useful functions to have)
TryAPL uses safe exec, some system commands could be dangerous to the platform TryAPL is hosted on, aswell as revealing sensitive information
19:09
^ but what do you mean by "expensive"? Also, it doesn't make sense to do performance comparisons on a machine that is shared with others.
Btw, TryAPL has no system commands at all. Anything that looks like one is just emulated.
That's fun trivia :)
Well, it is all in the open.
@Adám Love that Dyalog is sharing all these tools as open source!
We're trying to become more and more open and permissive. Ultimately, we want all our APL code on GitHub.
19:30
@Adám Maybe it will take longer time to load, if you load more things in the session; don't know. Anyway, way doesn't it make sense?
@MasterQuiz the CPU load due to others using it can easily massively influence the timings
@MasterQuiz We can easily inject things on the server side and remove them again before sending the state back.
But where would we put them? We don't want to pollute with reserved words.
We could, however, provide a library of pre-cleared items, instead of have you try each one.
 
2 hours later…
21:49
Is this a decent way to add two binary numbers? (input and output is a vector of chars)
AddBinary←{
     a←2⊥(⍎⊢)¨⍵
     b←2⊥(⍎⊢)¨⍺
     ⍕((2⊥⊢)⍣¯1)a+b
 }
@Richard (⍎⊢) can be just ; ((2⊥⊢)⍣¯1) can be 2(⊥⍣¯1)
with ⎕IO←0 you can do '01'⍳x instead of ⍎¨x
ah yes, of course. First one I should have figured out myself.
@dzaima :)
and '01'[x] instead of , which also gets rid of the spaces
with , you can deduplicate the processing of both args: '100010'{'01'[2(⊥⍣¯1)⍺+⍵]}⍥{2⊥'01'⍳⍵}'111'
Ah yes, 'Over' preprocesses the right function for right and left argument, insn't it?
yep
22:02
and next it uses the left function with the result.
nice
theory is slowly getting into practice.
for me at least
Is '01'⍳x faster compared to ⍎¨x or is there also another reason?
@Richard it's both 2000x faster and it's more array-y
ok, I'm convinced ;) Thanks
22:33
How much more nicer is
(×⍨⍣¯1)
compared to
{⍵*0.5}
⋄ (*∘0.5)⍳10
@FawnLocke 1 1.414213562 1.732050808 2 2.236067977 2.449489743 2.645751311 2.828427125 3 3.16227766
Nicer than both imo
at least for aesthetics (completing my post)
@FawnLocke yes!
      ]runtime -c "(×⍨⍣¯1)⍳1e6" "(*∘0.5)⍳1e6"

  (×⍨⍣¯1)⍳1e6 → 3.2E¯3 |   0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
  (*∘0.5)⍳1e6 → 3.7E¯3 | +17% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕


Although it seems to be slower if that's a concern
22:38
but I just like the looks of selfie and power :)
ah strange?
the invert is using a different method I asume than *0.5
Must be, can't say I know. I'm not familiar with the inverting rules
@Adám explained it uses different approaches. First algebraic and if that does not work out numeric I thought
@FawnLocke huh, they're both the same for me
22:51
@KamilaSzewczyk Thanks, I'll check into that
Maybe using tables for often used arguments?
@Adám Looking good, thanks!
@Richard I can assume there's a particular algorithm to find the square root.
@Richard find this one less readable
@MasterQuiz there's a whole x86-64 instruction to calculate the square root
@Richard find this one less readable, but just because I got used with the second one
@MasterQuiz Yes I agree, but just like the looks of selfie and power. And in this case they are hand in hand. Form over function in this case
23:14
Hi!
Is there a online tutorial for APL?
Yes. You can find many links overhere
https://www.dyalog.com/getting-started.htm
thanks
And this one.
https://xpqz.github.io/learnapl/intro.html
All depends on how experienced you are in programming or not
@Richard I would say yes
Than perhaps my last link. But as I am not, others might give better advice.
23:24
xpqz for a weekend introduction, APL cultivation to flesh out certain topics. That's always my advice
ok
so I can use tryapl for testing out apl code?
yep, with some minor restrictions
Ok, so does 6/2 output 6 2's instead of 3?
@rak1507 what are the restrictions?
@grandBagel yep
@grandBagel time limit + smaller memory limit + some fns banned for safety reasons (but you probably won't come across any restrictions)
what about the tio?
23:33
older version it's still on 17
Wait, if high-minus is negative number, what is normal-minus?
Apparently, -5 is the same as <high-minus>5
@grandBagel it's a function that returns -x
so -5 and ¯5 are 'the same' but -1 2 3 and ¨1 2 3 aren't
@rak1507 what does - 1 2 3 output? -1 -2 -3?
⋄ -1 2 3 ⍝ yep
@rak1507 ¯1 ¯2 ¯3
23:38
wait is that a bot
hmm
⋄ -5
@grandBagel ¯5
nice
What does do normally?
Statement separator, it's identical to a newline
23:43
What is the difference between APL and Dyalog APL?
Dyalog is the most widely used implementation of APL, it is dedicated to backwards compatibility so most APLs are compatible with it
What about Dyalog APL (Unicode)?
I believe that's just a difference in versions, they're the same
I typed a ← 2×5+7 and then a. Why does it give me 24 instead of 17?
APL is executed right to left, there's no operator precedence (for the most part)
23:50
wat
⋄⊢a ← 42
@grandBagel 42

« first day (1813 days earlier)      last day (1138 days later) »