« first day (1431 days earlier)      last day (345 days later) » 
01:00 - 22:0023:00 - 00:00

1:22 AM
Random thought: seeing as BQN uses different notation for function application and stranding, would it be more possible to make an 'array of functions' or something like that?
Any reason BQN uses the opposite to dyalog for ×÷?
1 hour later…
2:28 AM
@rak1507 you already can with both strand and array notation. But it is juat an array of functions
@rak1507 the keys for the APL layout are and , but - is more like ÷ and + is more like ×
2 hours later…
4:03 AM
@ngn they're on spotify if you use it
5 hours later…
8:41 AM
@Razetime i don't. i use curl and vlc. it's puzzling that there are links to various streaming services but no big fat download button. it's as if the author is hoping to profit from this somehow.
2 hours later…
10:29 AM
Well, any little money they get from streaming helps
3 hours later…
1:29 PM
I doubt they're trying to profit, more likely that 99% of people use some sort of streaming service to listen to podcasts
1:50 PM
@rak1507 There's some material in the documentation about arrays of functions. They're also used for control structures.
Brilliant, that's so cool
BQN looks like a really great language from what I've seen so far, definitely going to spend some time trying to learn it
@rak1507 just curious: what about it impressed you so much?
All the primitives are good, the fact that you can have first class functions, the symbols are really nice and consistent as well, it just seems to be well thought through and quite polished
so, nothing in particular apart from first-class functions
The primitives and design too
1:57 PM
i see
i'd like to see a head-to-head comparison of dyalog, bqn, k6, k9 on various tasks
Yeah that'd be cool
@chrispsn various aoc solutions (or similar things) is probably the closest you'll get. (and afaik noone's been consistently solving aoc in BQN)
@dzaima Has anyone been inconsistently doing it (and publishing)?
I'm having problems accessing Github right now, does anyone else see this?
2:01 PM
@chrispsn probably won't happen :( k9 is work in progress and you're not supposed to make performance comparisons, iirc. k6 is dead. bqn doesn't have an implementation with decent performance. dyalog won't get into a fight that will make them look bad.
@Marshall I've shared at least one BQN aoc solution, so I count :)
isitdownrightnow.com says it's up though.
@EliasMårtenson seems fine to me
@ngn i don't mean performance (well, not necessarily) - just language expressiveness / aesthetics
@chrispsn how do you measure that?
2:03 PM
doesn't have to be a metric - just a side-by-side
@ngn I don't think Dyalog is being that strategic about it. They haven't managed to publish benchmarks against Numpy, and I'm sure Dyalog would win that one.
(and maybe a brief commentary about how the approaches differ beyond surface-level glyph differences)
@dzaima Thanks
github looks ok here too
(hmm i should have a markdown "language" in paste)
2:09 PM
@chrispsn I guess the first X Project Euler problems would be the Schelling point task and there are probably Dyalog and K solutions for those out there. They ask you not to publish solutions, though, and the problems are very biased towards number theory and solutions will be pretty short for my tastes.
@Marshall advent 2020 could work, too
put another way: on which tasks will BQN excel versus other array languages (dyalog, j, k variants)?
what's the sweet spot?
@chrispsn In case you haven't seen it, I have translations of about half of Roger Hui's 50 functions, which you could compare to the originals with some amount of effort.
@chrispsn what's the point of doing this if we don't have an objective winning criterion for the comparison?
expressiveness/aesthetics are seen differently depending on whom you ask
@ngn getting a subjective, personal, comparison?
@dzaima fair enough :)
2:14 PM
@ngn so allow each person to evaluate the information themselves. The results are gonna differ, as they should, but that doesn't really matter.
@Marshall thanks!
@chrispsn I'm not sure that question (or my interpretation of it?) is very helpful. BQN deliberately strips out anything vaguely domain-specific because those things should come from libraries.
The main advantages versus APL I'd say are functional programming and greater consistency and rigor. BQN has fewer moving parts and is less likely to do something unexpected or force you into an unreliable solution (say, one that only works on vectors). Versus K it would be the ability to use multidimensional arrays.
And closures, which as far as I know aren't in any published K?
@Marshall not in any official ones afaik
@Marshall me: feels pain but tries to hide it with a smile :)
multidim arrays aren't quite an advantage outside of golfing and "aesthetics". closures though..
@Marshall this is very neat
2:30 PM
sometimes i wish k were a lisp with array capabilities rather than an apl with first-class functions
@ngn The only way to do that is make a lisp with array capabilities right
@Marshall I'll try making aoc solutions in bqn during 2021
@Razetime the only way to do anything in k is to persuade its author it should be so
lol what
@ngn ngn is the author of ngn/k, and i believe you should be able to persuade him
@dzaima must be hard to persuade the self
2:35 PM
@dzaima sadly, very few people are still interested in k6
Everyone's now interested in dog?
yeah, k9 :)
would it be hard to rework it to the k9 standard?
@Razetime probably no harder than k6 but i think k6 was better designed
oh ok
2:38 PM
@Razetime there's no "standard". it changes often, and it's made in secret.
@Razetime You mean AoC20 solutions, but solved after this year ends, right? Sounds really good, and I'd be happy to give you feedback or tips if you show me the code as you're working on them.
2:54 PM
@Marshall No I mean I want to learn bqn properly, and finish the AOC2021 solutions as they come
@Razetime that's, like, planning ahead a whole year. :o
well why not lol
I'm gonna go on reddit and post bqn swag answers
@Razetime bqn might not survive that long. i'm looking fwd to the time marshall becomes disillusioned and goes into k :)
@ngn b r u h
2:57 PM
What makes K so much better in your eyes than any other array language?
joke, of course, but seriously: the array community needs better language design
@rak1507 simplicity
speed is second, as a side effect
BQN seems pretty simple too
k is mega quick
@rak1507 don't you dare say something that is not k is simple in front of ngn
Have I committed blasphemy? Oops
3:00 PM
@rak1507 i don't understand its array model. do you?
@ngn wait what. it's literally any non-APL array model (well, where arrays don't have different types) but has shape instead of length
@ngn It's exactly K's model except instead of lists (1 dimension) you have arrays (n dimensions).
@Marshall k also differentiates between e.g. integer vectors and a generic list of integers afaik, which BQN doesn't
@dzaima what
in k (0;1;2) is the same as 0 1 2
@ngn oh huh, i thought they were visibly different by design. so i guess it's prototypes to blame for the difference between !0 and ()
3:08 PM
@dzaima yes, and lack of prototypes is my fault in ngn/k. k5 (at least early k5) had prototypes. afaik only k6 was experimenting with abandoning them, and i decided to follow suit. k9 has prototypes too.
well then BQN's array model is literally k's but shape can be multiple integers. ¯\_(ツ)_/¯
(and dzaima/BQN's array model has pretty much the same prototype behavior & problems as ngn/k's \o/)
why is ⊏(0‿1)‿(2‿3) not the same as 0‿1?
@ngn is the "first cell" builtin. is the "first element" one
@dzaima need i say more?
@ngn always keeps its result at the same depth. See the indices document.
3:14 PM
@ngn why is ⊃1 2 3 not 1 in k?
@dzaima it is
@ngn In BQN I can easily select along multiple dimensions of an array at once. How would you do it in K?
@dzaima (aka obvious misuse of builtins is not a fault in the language, but the fault of the user)
@dzaima you know k is ascii-only, right?
that's a value error because ngn/k treats unicode chars as single-char identifiers
@ngn ok, why is &1 2 3 not 1?
3:19 PM
@dzaima monadic & is "where" (that's where dyalog's ⍸ came from)
@ngn and how is that "better" than my answer?
& is clearly different from *, just as is clearly different from
(and yes, the glyphs ⊏⊑ are a little weird. Not like K's choices are obvious without learning them though.)
(and to be fair, i really don't like the ⊏⊑ glyphs)
@dzaima i'm confused. you're giving irrelevant examples.
@Marshall mind if I go unicode hunting for some good glyphs?
3:22 PM
in k "first" is monadic *. there is no distinction between "cell" and "element". that's one of the reasons i said it's simpler.
@ngn so all you're really saying is less features ≡ simpler
@dzaima that's by definition
@ngn what's your reasoning for having &?
@dzaima that's a question for the author
@ngn you're the author of ngn/k :)
3:25 PM
@dzaima my reasoning is: k6 had it :)
@dzaima "what's my reasoning for having &" - are you asking seriously or just shooting random questions to distract from the topic?
@Razetime I'm not really inclined to change things at this point, and I think messing with ⊏⊑ would require a lot of other changes as well. Go ahead and look if you want, but I probably won't use what you find.
@Marshall maybe something in apply/index?
@ngn i'm asking because many answers would have analogous reasons for having both and (not the "is in k6" one though..)
@dzaima if i have to answer seriously, x@&y is the equivalent of apl's "compress" but useful for other purposes too
@dzaima again: there is not such thing as a "cell" vs "element" distinction in k
@coltim Cool. That looks very much like a second indexing function though, which I believe proves my point?
3:29 PM
I think & also handles the expand/replicate one too (depending on if its list is made up of booleans or of integers)
@Adám reading your bio on the APL wiki led me to your style guide, which I like a lot. I have a problem following it in the MENACE book, though: afaik it is not currently possible to write or edit multi-line dfns using the daylog jupyer notebook, so the only thing I can do is place comments after the dfn def, and the dfns cannot be traced as they are single line :)
@ngn so, "useful" can sometimes be better than "simple". Some reason that cannot apply for having both and ?
@dzaima what does & have to do with ⊏⊑?
@ngn literally nothing, other than that both & and ⊏⊑ can be useful, and adding them to the language doesn't make it simpler
@RomillyCocking I'm sure there will be a way to do multiline dfns, maybe RGS would know as he's done a lot with jupyter notebooks when reworking MDAPL
3:31 PM
@dzaima isn't it simpler to have just monadic * instead of and ?
@Marshall The . vs @ part, or something else?
@rak1507 I'll ask him, ty
@ngn i mean, yeah, but is that "better"? (equivalent to "isn't it simpler to not have &?")
@dzaima you've just said & has nothing to do with it. it serves a completely different purpose from getting the first item/element/cell/thingy
3:34 PM
@ngn yeah, but it's still useful. You're only arguing about simplicity, so which specific builtin we're discussing should not matter at all
@dzaima ok, let's leave * aside and argue about the usefulness of & then. how does bqn do compress and replicate?
@coltim I was thinking . versus []. Are those both different from @ or are some of the three the same?
@ngn right, i didn't think that far ahead, i thought k had compress/replicate
@dzaima nope, it's just at-where.
3:36 PM
better: why have both dyadic # and _ when _ can be always replaced with #?
@ngn Monadic / is Where/Indices; dyadic / is Compress/Replicate.
@Marshall ah, so there we also have a similar situation to "first"
@rak1507 ]dinput does the job perfectly. Thanks.
@Marshall two primitives that do almost the same thing and one can be expressed trivially in terms of the other. you put 2 in the language, arthur limited himself to 1.
@RomillyCocking great!
3:38 PM
@dzaima why have both 32-bit and 64-bit ints when having only 64-bit would undoubtedly be simpler?
@dzaima is that about k9?
@Marshall They all end up being syntactic sugar for each other (u@ux is always equivalent to u . enlist ux.) and (Nothing can be expressed with brackets that cannot also be expressed using ..)
@ngn i don't know what k9 has, i'm looking at ngn/k
@dzaima because that has significant impact on performance
@ngn so, having performance can sometimes be "better" than having simplicity?
3:39 PM
@coltim I believe we have achieved ironic juxtaposition.
@dzaima yes, if significant
@dzaima the equivalent of _ using # would be too long, wouldn't it? assuming you mean (1-dimensional) reshape and drop
@coltim Is there a backslash-backtick in this message somewhere? I can't parse it.
@ngn and doing everything with only 1D vectors is never longer than when using higher rank arrays?
@Marshall I think it's that both sentences end with a period
@ngn also, so smaller code length can sometimes be better than simplicity?
3:45 PM
@dzaima i mentioned "1-dimensional" only because list# is reshape (like in apl), and list_ is cut. these two don't feel like counterparts of one another like their 1-dim variants do.
@dzaima according to kolmogorov they are the same thing
@rak1507 I thought I'd read the wiki, but maybe too long ago. Several questions now answered. Of course, by reading the docs I lose my amateur status :)
@coltim So they're all equivalent, but none of them are exactly the same. Is that right?
*dylaog jupyter wiki
@ngn i really should learn k when arguing about it..
mhm :)
3:47 PM
but modified assignment is truly redundant, right?
@dzaima Most people don't seem to...
@dzaima it is :) it doesn't exist. it's just syntax sugar for tetradic .
@rak1507 yes - .[a;i;f;b], if you've come across such a thing
@ngn but it's still a part of the language
3:48 PM
no, I haven't
@Marshall I think this is one of the only places in k where there's so much overlap between the builtins. I assume it's an artifact of how dealing with deeply-nested data is difficult, so having more specialized tools in this specific niche makes sense. I mean this is the same language that expects you to use -_- (negate floor negate) for ceiling
@dzaima yes, sometimes it's easier to type a[i]+:b and think in terms of that
What a coincidence, -_- is the face K programmers make when you suggest there's a simpler way of doing things @coltim
(or *| (first reverse) for last)
@ngn and sometimes it's easier to type or and think in terms of higher-rank arrays
3:50 PM
@rak1507 .[a;i;f;b] means amend the array a (it could be a symbol, in which case the global with that name is amended) at indices i, with the function f and right argument(s) b
@ngn I don't know exactly how this fits into the discussion, but my position is that by far the most significant cost of adding a (well-designed) primitive is the difficulty of learning and remembering what it does. Both for writing and reading, so it's not enough to say "just ignore it if you don't want to learn it". By this criterion some primitives are far more costly than others. The second case of / is essentially free.
@ngn that's interesting, how do functions with more than 2 arguments work tacitly?
@rak1507 k doesn't really have tacit code
@Marshall so why did you add so many if it's so costly?
@rak1507 in the simplest possible way! :)
3:52 PM
@ngn (i.e. they don't)
@rak1507 If you somehow have a list of the arguments you can use {x,y,z} . (so the first element in the list is the first argument passed to the function, the second the second, etc.)
@coltim I consider indexing one of the hardest problems in array language design. I don't think there is a really satisfactory solution. Probably BQN's way could be improved, but I don't know how.
@rak1507 1+%2* is the same as {1+%2*x}. just wrap in {} and add x. you can't say that about j/apl's confusing odd-even trains!
@ngn that syntax is also quite redundant, no?
@dzaima (i guess it's also simple, but its simpleness isn't 0 so it does make the language more "complicated")
So 'trains' in k are more like function composition?
3:54 PM
@rak1507 yes, projection (i.e. currying with left arg) and composition
@ngn Um, I chose to add primitives when it wasn't costly? Arthur says every primitive is extremely expensive, and ASCII sets a hard limit on how many there can be. I say primitives can be cheap.
@rak1507 1+ is a projection. ++ is a composition.
Right, cool
@Marshall I would add five primitives like «» before adding one like Dyalog's .
@Marshall right. to fit in ascii, k's primitives underwent careful selection. only the most useful made it.
3:58 PM
@ngn Also worth pointing out that being able to choose a symbol from all of Unicode rather than being forced to find a closest fit in ASCII means that BQN primitives can have more intuitive representations, making them cheaper than K ones (not that Unicode has perfect coverage of useful symbols).
@dzaima what would you suggest it should mean instead? nothing?
@ngn i'm not suggesting removing it, but i am trying to understand why you wouldn't. (and i would expect you to prefer nothing)
@ngn How does it know that 2 is a left argument and not a function here? Would it work with a variable t:2?
@Marshall i'm a little torn about this, tbh. i like expressive symbols, but the advantage of being able to type on any keyboard without extra configurations and fonts is just too great..
@ngn That's fair.
4:01 PM
@Marshall in ngn/k my policy is to allow but not require unicode (some might argue that "allow" easily leads to "require" and that's not wrong)
@dzaima well, 1+ is there - it can be typed. it would be a shame to waste it as a syntax error. i think k projections/compositions are the most natural thing that could occupy that place.
@Marshall have you seen the 1line grammar?
@Marshall I really like the consistency of the modifiers in BQN
@ngn No.
@Marshall that wouldn't behave any differently than {1+%t*x}
@ngn does K have any concept of 'rank'?
@rak1507 nope. everything's either a 1d vector/list, or an atom
4:06 PM
I was going to ask if he thought having map and outer product were worth it seeing as they can be done in terms of rank
@Marshall E:E;e|e e:nve|te| t:n|v v:tA|V n:t[E]|(E)|{E}|N (a bit of explanation)
@rak1507 There's each/each-left/each-right
@ngn That's an ambiguous grammar, isn't it? nve is a subset of t(te).
@Marshall do you mean t instead of 2 (where t is already assinged), or t:2 as part of the train?
@ngn First one.
4:10 PM
@Marshall oh sure, that'd work
a train is a sequence of terms. some of them are nouns, some verbs. it parses very much like apl in this respect. but noun-vs-verb is decided purely based on syntax, not runtime. so t would be a noun regardless of what you have in the variable t at runtime.
also note that { } is a noun - this is important for understanding k's grammar correctly
@Marshall first match wins
@ngn So if I have two functions f and g, I can't use a train to compose them?
@Marshall you can do f@g@
(@ is "apply")
Well, at least it's context free, I guess. So basically things are nouns by default, except primitives, and there's syntax to treat something as a verb.
BQN's parentheses are purer because they can never change the semantics, only grouping, but it's also more difficult to convert a function to a subject in BQN.
@Marshall yes, and also anything followed by an adverb, e.g. +/, 1 2':, (f g@)' are all verbs
4:26 PM
@ngn I was kind of grouping that in the "except primitives" case, but I understand it comes from the same rule as the "syntax" @.
f@ makes a verb out of f only because @ (the last term) itself is a verb
taken together, f and @ make a projection equivalent to @[f;] or {f@x}
justaposition of nouns acts as "apply" too, so {f x} would also work
and so would {f[x]} (now dzaima is going to criticize the redundant syntax :) )
from what i mentioned above, only f@ is a verb though. the others are nouns that are functionally equivalent.
@ngn *juxtaposition..
@ngn Oh, and a list of numbers is a single token. So 2 3 is completely different from (2) 3.
@Marshall yes! i forgot to mention that
@ngn How exactly does @[f;] parse in the grammar? It's got an A with no t before it.
@Marshall n:t[E] because @ is a verb and therefore a term (the t in n:t[E]). E is a ;-separated sequence of expressions
@Marshall there are no adverbs (A) there
makes sense?
4:36 PM
@ngn No! How does f@g@ work if @ isn't an A?
@Marshall did you notice the empty alternative at the end of e:nve|te|?
@ngn Yes...
so, e can be empty. nve is an e, so nvnve is also an e, and replacing the final e with empty, we conclude that nvnv is an e
f and g are n-s, and the two @-s are v-s
@ngn Oh, so you can't actually turn a noun into a verb directly, you just have to use completely different syntax to apply it.
@ngn i can only imagine what this sounds like to someone who's just passing by and reading this in isolation :)
@Marshall yeah, you make a train. f@ and f@g@ are trains.
(using the term "train" loosely as "a sequence of terms ending with a verb", not "an odd-even train like in j/apl")
4:44 PM
@ngn So... is there any way to apply a user-defined verb as an infix function? Or do you just have to use brackets?
@Marshall you have to use brackets
@ngn Ouch.
@Marshall there are a few ways: f[x;y] ←→ f[x]y ←→ f . (x;y) ←→ f@/(x;y) ←→ ..
With that requirement I'd probably rather have all user-defined verb application be done with brackets for consistency. So you'd basically have C with more operators/primitive verbs, plus adverbs.
@Marshall i see that as the sacrifice necessary to make the language statically parsable without resorting to things like _f_ (as in some other languages) for marking infix user-defined verbs
@Marshall even monadic? i like f x as an alternative to f[x]. in a long expression that can save a lot of ]]]
4:52 PM
@ngn I'm on the other side of that tradeoff, I guess. BQN's syntax is way more complicated, but at least it lets you change a primitive to a variable without changing other things.
what's the syntax in APL/BQN for a function with more than two args?
@Marshall coincidentally, a couple of days ago we were discussing with @coltim a possible extension of k6 to do exactly that with unicode chars - treat them as proper verbs
@coltim I guess in apl you'd do something like {(a b c d...)←⍵ ⋄ stuff}
or make it a dop and abuse ⍺⍺ and ⍵⍵ for the third and fourth arg
@ngn I think so. An extra option that only works part of the time forces you to spend too much time thinking about when you can use it.
@coltim No such thing; you have to take a list argument.
4:57 PM
Can you take multiple args in tradfns? Never used them so idk
@Marshall i don't think about it, i just remove the [ ] when they are unnecessary
@ngn You don't think about thinking about it.
in the monadic case they are almost always redundant
@ngn "Almost" for when the argument is a verb, I take it?
if you have a monadic application to the left of a verb, e.g. (f x)+1, the [ ] can replace ( ) like so: f[x]+1
@Marshall yep, that's one such case
5:00 PM
@Marshall well, it's better than the BQN case of F ⊑⟨x⟩ when your right arg has function class
@Marshall if you're into lisp, think about (f x) as an s-expression and f[x] as an m-expression
@dzaima Yes. I did mention that.
@ngn I would consider a lisp where s-expressions can only have one argument to be highly questionable.
@rak1507 tradfns are monadic-or-dyadic like all apl functions, but i think you can deconstruct the args with something like ∇r←f(x y z)
right, that's what I meant, I think I've seen something like that before
@Marshall i wish it were more like a lisp :)
5:05 PM
@ngn Well, thanks for explaining K's grammar! I'm off to lunch now.
@ngn ..or niladic, unlike dfns
@Marshall thanks for paying attention
the existence of niladic functions seems like a strange choice
@rak1507 minor offence compared to dynamic scoping :)
I don't understand enough to have an opinion
@rak1507 tl;dr you can do a←0 and if you forget to declare it as a local, that would modify the a in your caller's local environment (if it exists), not the global a (if it exists)
5:10 PM
can't you do that in most languages?
definitely not
can you give a simple example?
Ah yeah, I tried f ← {a←0 ⋄ _←g ⍵ ⋄ a} ⋄ g ← {a←1} ⋄ f ⍬ but it gave 0 as expected
dfns are fine wrt scoping, they use lexical
5:18 PM
Ah makes sense why I've not come across the issue then, I never use tradfns
@ngn (a few issues with error guards, but let's look the other way..)
@rak1507 i never use them either
reading about APL history, it seems weird dfns weren't viewed as significant at the time as they are so much better than tradfns
It's very fortunate that John Scholes was interested in functional programming
@rak1507 yes, dfns are there mostly thanks to his vision and persistence
5:59 PM
@RomillyCocking Did you read this?
6:15 PM
fun fact (might be obvious to people idk) -⍨/ is the same as ¯1⊥ for a length two right argument of simple scalars (thanks @Adám)
@rak1507 Sounds like a valuable addition to the golfing tips for /
Not sure if it is that useful to be honest
@Adám I did, thanks to a tip from @rak1507 but then it was too late to delete my earlier message.
I have some questions about operator definitions in Dyalog
@phantomics Go ahead.
6:25 PM
This gives me 35 as an answer, shouldn't it give 280?
op←{8 ⍵⍵ 5×2+⍵} ⋄ × op⊢ 5
⍵⍵ is ⊢, ⍺⍺ is ignored
@phantomics Try substituting in the operands into the formula.
I tried "op←{8 ⍵⍵ 5×2+⍵} ⋄ op×⊢5" before, it gave me a syntax error
@phantomics ⍵⍵ indicates a dyadic operator. It MUST get a left operand.
Ok, it works with op←{8 ⍵⍵ 5×2+⍵} ⋄ 3 op ×⊢5
Is there a way to define a monadic operator?
⍺⍺ only?
6:31 PM
Sure, but note that 3 is ignored, since you don't reference ⍺⍺.
@phantomics Yes, that. And the lone operand goes on the left, just like with ¨
Got it, that makes sense
I figured that a one-operand operator should work like / and ⌸
@phantomics Indeed, they also take their operands on the left.
Makes sense, thanks
2 hours later…
8:56 PM
how do I shorten long links?
@rak1507 You don't need to. Press Shift+Enter after pasting the link.
any tips on speeding this up?
particularly traverse
Ouch, that;s a lot of code. Maybe some comments?
⍝ does a bunch of stuff
8:58 PM
no problem
Alpha complex.
oh lol
can you save without exiting in )ed?
@rak1507 Yeah check settings, keyboard shortcuts for "fix"
I've got mine set to "Ctrl+S"
9:03 PM
<C-x>x if using the tui
@rak1507 What RikedyP said, but look for "FX", and don't mind that it speaks about a "function" ― it applies to any item.
@Marshall I'm making that lisp :)
9:33 PM
Is there a \ that saves results?
@rak1507 What do you mean?
for example +\1 2 3 4, rather than computing 1+2+3+4, 2+3+4, 3+4, do 3+4, 2+that, 1+that
so it doesn't have to do as many calculations
Special optimised combinations don't actually recalculate.
You can also look into memoisation operators.
^ it means no :)
@rak1507 the correct question was if there's a / that saves intermediate results. in dzaima/APL that'd be f⍨\⌽
9:42 PM
Ah right yeah
@Marshall coltim already answered but to illustrate that plain old [ ] works too: ngn.bitbucket.io/k/#cFItmWM4tiDd2E4qydQVwgjMv
01:00 - 22:0023:00 - 00:00

« first day (1431 days earlier)      last day (345 days later) »