« first day (1502 days earlier)      last day (1145 days later) » 

12:00 AM
name me an implementation of any language that doesn't find itself at the brunt of lots of complaints about how things work
 
ngn
@nathanrogers bqn?
 
bqn has users?
 
@nathanrogers bf
 
ngn
@nathanrogers 2 of them :) which is more than avg for a programming language
 
@Adám I thought you said before a lot of people who work on APL code bases dislike it?
 
12:04 AM
@rak1507 Where?
 
hang on I'll try to find it
 
Doesn't sound like a very "me" thing to say.
 
I'm paraphrasing
 
How would I know? I barely know anyone who works on real code bases.
 
I bet a lot of outsourced devs hired to update APL codebases by managers who don't know the difference between APL and Java have had coronaries when they saw the code
 
12:06 AM
@phantomics Because they were all over 80?
 
Because they never saw a ⍴ or a ⌈ in their Java and Python bootcamps
 
@phantomics Surely managers don't hire Python devs for Java work.
 
Don't underestimate them, non-technical management can make all sorts of entertaining decisions
 
frustratingly, I can't find it, maybe I was dreaming but I'm sure someone at some point mentioned something along those lines
 
@rak1507 I'm sure that's true ::)
 
ngn
12:22 AM
@phantomics judging by the number of apl-like impls, most people think that it is :)
 
this is very annoying, can anyone else remember something like this? I'm sure at some point someone said something along the lines of people who work on the legacy code would prefer porting to a new language but that's not possible
 
ngn
12:52 AM
@rak1507 this sounds close
 
nah, not that, something else, I must have imagined it lol
 
ngn
if it was someone from dyalog, it must have been framed very differently
 
@rak1507 Morten says something like all Dyalog's major clients have tried to switch to other languages at some point and given up. I don't remember anything about individual programmers though.
 
ah well maybe I'll stumble across it in the logs one day and then I'll look like less of an idiot
 
APL: the quicksand pit of languages?
 
12:59 AM
@phantomics I mean, only after you write a few million lines of code with it.
 
@Marshall Wouldn't that be the case with any language?
 
is there a way to search for symbols/punctuation?
 
In SE chat, you mean?
 
ngn
@Adám if it's a parsable language it could be transpiled, at least in theory
 
@Adám yes
 
1:01 AM
@ngn Can you tell me any PL that can reliably be transpiled to another language, even though neither language was designed with that goal in mind, nor are the two languages trivial variations of each other?
 
ngn
@Adám you're sneaking in extra conditions there :)
 
@rak1507 No. But I think @dzaima "downloaded" the entire transcript so it could be searched.
@ngn Only to exclude silly answers.
 
@Adám This is probably not what you're talking about, but Scala can be (somewhat reliably) transpiled to JS, as can a bunch of other languages
 
Lisps can be transpiled into lots of things, in some cases requiring that you use a particular dialect to be transpiled into the target language
 
@Adám (i tried to search for what rak was trying to find with it, but failed to find anything)
 
ngn
1:04 AM
@Adám the perfect example is scheme - simplest of all syntaxes, well-defined semantics
 
THe Lisp machines had compilers for C, Fortran and other languages that generated Common Lisp code
 
@dzaima would it be possible for you to grep for ...
 
Being able to transpile the syntax isn't enough. PLs are a lot more than syntactic rules.
 
@Marshall Are there seriously million-line APL codebases out there?
 
ngn
@Adám on the other side of the transpiler - probably the jvm, as there are so many languages targetting it (though it would probably be a compiler in that case)
 
1:06 AM
@phantomics Just going by memory here, but yes I believe there are a few.
 
@rak1507 4486 messages
 
possible for you to send them in a file somehow?
 
@Marshall Wow, I'd think a few thousand lines should be enough for a strong AI
 
@ngn The distinction between transpilers and compilers is somewhat blurry. I've seen tutorials on how to program in JVM bytecode directly.
 
@dzaima (also includes ones that have been truncated with '(see full text)' because i was too lazy to get those; remind me to do that tomorrow pls)
 
1:08 AM
@dzaima Would it be possible for you to create a public repo with the content, and then update it periodically?
 
ngn
@user true. i've programmed in jvm bytecode directly but it was long ago.
 
@Adám after i load the truncated ones tomorrow
@rak1507 do you need the ids, text, or html?
 
just text would do
I'm not even sure if there was a ... in the message but lets hope so
 
@rak1507 here
 
thank you :D
 
1:12 AM
updated to include usernames because that's probably useful
@dzaima (actually no it doesn't, those have )
 
brief skim over things and I've not found it, I feel like someone in an asylum trying to prove that they are sane
 
@rak1507 At least Nathan agrees with you.
 
does he remember it too?!
 
@rak1507 I really do believe you but I think it would be best if you stay here with us for a while.
 
lol
 
1:20 AM
4 hours ago, by nathan rogers
I've truly stepped into another timeline
 
(I don't think that was the message I was looking for, but it's at least something)
 
@rak1507 That doesn't have anything alluding to how difficult or not it would be to migrate.
 
yeah, that wasn't what I was looking for, but it is at least some evidence of wanting to migrate from APL
 
So?
I could have told you that (again).
 
your message said 'vendor locked-in' people were not likely to complain, isn't migrating to a new language the biggest complaint there is?
 
1:30 AM
Isn't considering migration but deciding to stay the biggest compliment?
 
depends on their reasoning for not migrating
 
Right. So without knowing the details, there's really no conclusion to be made.
 
true
 
ngn
@Adám like, people who tried to escape from prison but couldn't, must be loving prison so much
 
Afaik (this is one of the customers I've actually visited), they are quite happy with Dyalog APL as part of their stack.
@ngn No, not "couldn't", "didn't".
 
ngn
1:32 AM
tried to, couldn't, so didn't
 
Who said they tried to?
They planned to, but they never made a real effort.
 
@Adám I would assume they would be pretty far in their plans if you managed to get to know about it
 
ngn
@Adám "arranged leadership for the explicit purpose of facilitating migration of their own things away from APL" - i interpret that as "tried to"
 
That was a step that would have made it easier for them to make the move, but even though they successfully laid down that easier path, they still decided to stay.
 
@Adám you think they'd set all that up just to "decide" to stay?
they surely would decide whether it's a good idea before setting up separate leadership for the project
 
1:36 AM
@dzaima Yes. As I remember it, they did actually port some APL code (to C++, I think) but found that APL was valuable enough to keep for some of the other code. So not because they couldn't migrate APL code.
 
 
1 hour later…
2:56 AM
I need some advice, in case any of you are awake.
 
as long as there is homework to procrastinate doing I will be here
 
OK, thanks. :-)
 
am here too
 
Here's the problem: Since I have now implemented Dyalog-style trains, I need a way to assign them a name. Similar to Dyalog FN ← ×+÷
 
@dzaima (decided to upgrade (well, rewrite) the orchard scraper now because why not)
 
2:59 AM
Now, in Kap, functions are defined using: ∇ a fn b { a+b }
Or the short form: ∇ fn {⍺+⍵}
 
how do you do inline functions? (or can you?)
 
Multiple arguments (actually destructuring lists) are implemneted as such: ∇ FN (a;b;c) { a+b+c }
 
@rak1507 like regular Dyalog, assigning only is special
 
ok
 
My problem: There is no natural way to include the Dyalog-style function assignment of trains in this syntax.
 
3:01 AM
∇ fn (train)
 
There are no syntaxtic reasons why FN ← + couldn't be allowed. The problem is that while it woul dbe Dyalog-compatible, it would be very confusing since function declaration is a compile-time operation, and variable assignment is done runtime.
So using the same syntax for both would imply that you can reassign a function at runtime, which is not the case.
 
hmm, so there's no eval then I assume
 
So the question is: What syntax would be nice and concise for this type of assignment?
 
@EliasMårtenson you could have assignment be statically parsed specially just like -assignment
 
I've considered things like: FN ∇← +
 
3:03 AM
@EliasMårtenson probably what rak suggested (∇ fn (+⌿÷≢))
 
@dzaima Yes, indeed I can and that's one of the options I have thought of, but see my previous message.
@dzaima That would be problematic from a parsing perspective, because the leading part: ∇ fn ( is a valid function declaration
 
what about ∇ fn +/÷≢
different from the lack of parens but maybe that's equally as annoying to parse
 
@rak1507 no better than with parentheses (and actually worse)
 
yeah :/
 
@dzaima oh, a problem with that is that the train is actually a thing that's evaluated whereas with dfns, they're just stored
 
3:06 AM
@rak1507 Also problematic since + is a function which is a regular symbol. Consider this: ∇ FN FOO {...} if FOO is a function, this would be a short-form assignment, if it's not, it would be the long-form.
I have considered ∇ FN ← +
 
I don't like this very much, but what about ∇ fn ⍬ (train) because it takes no explicit arguments
 
@dzaima (scraper finished reading the 162400 messages yay, 67MB uncompressed)
 
@rak1507 That would be possible, in which case the parens wouldn't actually be needed.
 
I feel like that way is too verbose
 
Oh wait, they would
 
3:09 AM
@rak1507 at that point ∇← is better imo
 
agreed
you say it's compile time, but what do you do about something like value ← ⎕ ⋄ f ← value+⊢ in dyalog
where the train depends on the value at the time and not whatever is associated with the 'value' name at the time of execution unlike dfns
 
@rak1507 You can't do it like that. The compiler must statically determine what is a function and what is a value. However, all is not lost. You can use lambda functions for that: value←XXX ◊ ⍞value + ⊢
Where XXX could be for example: λ+×÷
 
wait, what is a lambda function
 
Basically the λ turns a function into a value, and ⍞ turns a value into a function
 
@EliasMårtenson also consider: ∇ fn (-⍣(⎕←2))
 
3:13 AM
@EliasMårtenson oh, neat
why bother having compile time trains then
 
@rak1507 using on every train invocation is a bit lame
 
@rak1507 A few reasons. Terseness, Dyalog compatibility, performance. A train can be type-optimised without doing flow analysis like you have to on a regular function.
 
@rak1507 i don't think the trains would be compile time
 
Also, when I put up the web-based kap demo page, the first thing that happened was that people started complaining that it didn't handle trains :-)
 
is there a reason 0≡≢scalar btw
 
3:16 AM
I personally don't use them (yet, perhaps I will start now)
 
1 2 3+,1 errors at least, yay :D
 
@rak1507 Wait, shouldn't it?
 
it doesn't in dyalog but that is a mistake
 
@EliasMårtenson it doesn't because Historical Reasons in Dyalog and GNU and most other impls
 
@dzaima OK, I agree that's inconsistent. What are those historical reasons?
I'm guessing APL2 did too?
 
3:19 AM
if you really want to make ngn happy you should make ⍳,5 equal to ,¨⍳5 too
 
@EliasMårtenson there wasn't any easy way to get from a 1-item vector to a scalar. So they, instead of adding a function for that, decided to make 1-item array behave like scalars
@rak1507 yeah that too exists for the same reason
 
@rak1507 That does sound logical. Now I have to check my code why Kap doesn't do that... I must have hadded a special check for it?
 
why does ⍳2⍴2 give an error 'Error: Index out of bounds: Reading index 0 from scalar'
 
Ah. Yes. Now I see what I'm doing.
The fact that ⍳,5 works that way is a historical accident due to how I implemented the extension of it to support non-scalar arguments.
 
⍳⍳5 causes the page to disappear!
 
3:23 AM
@rak1507 Yes. It's a bug. The pretty-printer crashes on 5-dimensional values.
 
ah ok
don't suppose you need many of them anyway
 
@rak1507 You should be able to see a very clear error in the JS console :-)
And true, this is the first time I've actually seen i thappened. I even forgot that this limitation existed.
 
there's a fun error on ⍳⍬ too
 
@rak1507 seems quite broken - (2⍴2)⍴2 errors too
 
Argh... Hang on :-) I need to have time to implement your examples as test-cases :-)
 
3:27 AM
dyadic f⍣g doesn't seem to exist
(sorry for all the random nonsense I'm firing at you :D)
 
@rak1507 Correct. Not implemented yet.
Not at all nonsense.
 
I'd say ⍳⍳5 falls squarely into the nonsense category
 
I need this. I'm just translating it to testcases for the test package so I'm sure to fix it.
@rak1507 Well it shouldn't crash :-)
 
is ⊃(1 (2 3)) not padding intentional?
 
@rak1507 (fwiw imo it's okay to error on that, though traditionally it doesn't; dzaima/APL errors too)
 
3:36 AM
Fixed it.
@rak1507 Yes. It's intentional.
However, the intent isn't based on anything else than my reading of the ISO spec.
I believe ISO says it should error.
 
3:50 AM
OK, I changed the behaviour of ⍳,5 as an experiment (all I needed to do was remove some special-cased code and fix a related bug in a different place). The only test case that fails is the one that explicitly tests for this specific case.
Should I commit that change?
It's consistency vs. compatibility
 
@EliasMårtenson I mean, you're one here to decide what KAP is for. I'd very much go with consistency
 
@dzaima Sounds good enough for me.
 
@EliasMårtenson I think ISO only defines scalar, and not singleton, extension. From the APL2 documentation it looks like they treat one-element vectors as scalar but not higher-rank singleton arrays.
 
Note how the fix literally removes a special-case. I like that.
 
3:56 AM
Why is "1 2 3+,1" supposed to error?
 
@phantomics because there's no reason for it to not error
the reason it should error is the same reason 1 2 3+1 2 should error
 
Are singleton vectors not supposed to be treated like scalars for this purpose?
There is no clear way for 1 2 3+1 2 to resolve
 
@phantomics that's the reason many APLs allow them, but singleton extension is regarded by many as bad
 
I'd be interested to hear more about the rationale
 
@phantomics it's just pointless when scalars exist. Not necessarily rationale, but a message from Dyalog's CTO
("when we only had ⍴" referring to times before existed, and to implement you had to do (0⍴0)⍴⍴x)
 
4:04 AM
Thanks, I'll consider making it a bug in April
 
@phantomics The reason you would need singleton extension is that you have axes in your data that don't correspond to anything you might use as an index. Singleton extension makes these disappear but it would be much better, and less bug-prone, to write your code in a way that doesn't introduce these superfluous axes.
 
I suppose you could have singletons whose number of axes is meant to convey an additional piece of data
 
@dzaima (maybe my "by many" claim isn't very founded. regardless, i believe it's bad, and others do too)
 
@phantomics Yes, but it doesn't seem like you would want the interpreter automatically throwing that data out for you.
 
Right
Should scalar ops with axes be able to scale singletons? I.e. (,1)+[1]⍪⍳3
I'm aware that the scalar + axis syntax is not well regarded
 
4:13 AM
@phantomics If ⎕IO is 1 (so, pairing a length-1 axis with a length-3 one if I got the shapes right), then I'd say that shouldn't be allowed for the same reason.
 
It's pairing a length-1 axis with another one
 
@phantomics It's a bug in kap :-)
 
since ⍪⍳3 makes a vertical table
 
@phantomics + with axis should use the axis as indices into the axes of the higher-rank argument to get axes to pair with the other argument, so you get a shape of 3 1[1] or ,3. Am I making an error there?
 
@Marshall my mistake, that should have been [2]
 
4:20 AM
Regardless, the rule should be that pairing no axes with some axes is always fine, and pairing axes of different lengths is never fine.
@phantomics Okay, then it's two length-1 axes and should definitely work (it would work if they had length 2!).
 
@Marshall That's what I thought, if you're not specifying it like that then I can see how arbitrarily extending a singleton is unacceptably vague behavior
Also I figured out that algo from earlier, now [↑ mix] is fully parallelized
 
4:41 AM
@phantomics What do you mean by that?
 
5:03 AM
@EliasMårtenson I was asking about how to implement sorting the dimensional bases used to transcode the row-major index within the mix function
 
5:22 AM
('e'∨.=⊃) this gets a cell of values, picks the item in the cell and asks are there any = t the letter e
cell input looks like this
┌─────────┬─────────┐
│e 461 550│h 564 900│
└─────────┴─────────┘
how can I generalize this to accept a right argument for the letter 'e' or any other letter?
 
a right argument?
 
er, left
'e' should be left argument
I tried just ⊣ which I was certain was the answer
but it isn't
I think because {⍺⊃⍵} on the right
 
∨.=∘⊃ is probably simplest
 
⊣∨.=⍥⊃
oh that works?
oh, that works :P
 
with ⊣ you would have to do something like ⊣∨.=⊃⍤⊢
 
5:27 AM
thanks
 
np
 
6:20 AM
@Marshall Hi, GNU APL dabbler here, I can confirm it doesn't support control structures, only classical branch
 
6:33 AM
for this codegolf.meta.stackexchange.com/questions/5243/… the SEDE query also includes questions in 2020, I assume they are not valid for the bounty though?
also how come ×⍨⍣¯1 ⊢ 4 doesn't work in dyalog extended
 
 
6 hours later…
12:47 PM
@rak1507 because × and are overridden, and ⍣¯1 does really funky things to get ×⍨⍣¯1 to work normally; `×`⍨⍣¯1 ⊢ 4 works
 
@dzaima ''⍴ worked but was ugly and not intuitive.
 
1:33 PM
@dzaima ah, thanks
 
2:22 PM
@Adám can you confirm whether or not challenges posted during 2020 are eligible for your bounty? The SEDE query data.stackexchange.com/codegolf/query/1156913/… uses <= 2020, should this be < 2020?
 
2:54 PM
@rak1507 Now updated to be clear that it includes 2020.
 
oh, it does? cool!
 
3:08 PM
@dzaima Any reason GH pages is not enabled?
 
@Adám the whole 60MB download on every page reload thing
(it'd be less compressed, but still)
 
@dzaima Sure. Or you could warn, then click-to-load.
 
@Adám nah. Downloading isn't that hard
 
Any way to get the utterly first item of a nested vector?
 
@nathanrogers ⊃⍣≡
 
3:11 PM
@nathanrogers ⊃∊ is shorter but much less efficient.
 
for the case where the utterly first item is ⊃⊃⊃ does ⊃⍣≡ make any difference?
 
@nathanrogers ⊃⊃⊃ will probably be a couple nanoseconds faster
 
hha, k
 
(of course assuming that "utterly first item" is a simple scalar)
 
3:31 PM
I have a question about variable encoding
variable meaning the encoding only marginally differs from another solution
eval ← {                             ⍝ ...
    ~×≢⍵ : 1⊥,⍺                      ⍝ ... Not any? Then sum reduce
    i←ind ⊃⍵                         ⍝ ... Current update indices
    o←¯1+'f n'⍳⊃⊃⊃⍵                  ⍝ ... Is on?
    'e'=⊃⊃⊃⍵ : ({2+⍵}@i⊢⍺) ∇ 1↓⍵     ⍝ ... Add 2
    (0⌈({o+⍵}@i⊢⍺)) ∇ 1↓⍵            ⍝ ... Add 1 or ¯1, with 0 floor
}
eval ← {                             ⍝ ...
    ~×≢⍵ : 1⊥,⍺                      ⍝ ... Not any? Then sum reduce
    i←ind ⊃⍵                         ⍝ ... Current update indices
These 2 are mostly the same besides the value of o and the left arguments to @
 
@nathanrogers Sounds like you need an operator :-)
 
How would you go about expressing this in such a way such that it is clear those differences
 
Create a single operator that takes two operands to specify o and the @ part, then define the two evals in terms of that operator.
 
What I'm drawn to is some kind of macro, but obv that isn't available. So perhaps a text representation with arguments with an ⍎
 
@Adám it seems here are 3 variable parts though
 
3:35 PM
@dzaima Oh, right. Well spotted.
 
@Adám but so far as I can tell there's 4 parts. o← 0⌈ o+ and 2+
I guess I could merge the o← 0⌈ and o+
that should work
 
using ~×≢ and 1⊥?!
 
@dzaima Ah, but each o is only used in combination with one particular version.
@rak1507 I'd write 0=≢ and +/ for clarity.
 
I thought he would have too
 
I guess 0⌈ can be applied universally
because when toggling and seeting to 1 or 0 that'll never change
ok no here's the problem
({o+⍵}@i⊢⍺)) uses the argument from @
(o@i⊢⍺)
depends on the argument from the outer scope
on the second one, I can simply (⍺⍺ ⍵) to get the ⍵ used to defin o in (o@i⊢⍺)
but for the first one, how do I return the function o + to apply to ⍵ of the @ function?
s06_2 ← {({(¯1+'f n'⍳⊃⊃⊃⍵)}∘+s06_1a 2+) ⍵}
I think that works?
but I'm getting wrong answers
 
3:49 PM
@nathanrogers Maybe I can have a look later, but I have to play with my children now.
 
I think I got it
well I'm close anyway. I named the out n←⍵ and then call (n ⍺⍺ ⍵) so the other functions don't break but that's not quite it, and I'm getting errors o the other
gotta run I'll check in after
 
 
3 hours later…
7:19 PM
DOMAIN ERROR
s06_1a[5] 'e'=⊃⊃⊃⍵:((⍵⍵@i)⍺)∇ 1↓⍵        ⍝ ... Toggle? Apply ~ to i in ⍺
                    ∧
               ⍵⍵
{~⍵}
yeah I'm not sure why this is a domain error
 
@nathanrogers What's up with that ⍵⍵ and {~⍵}?
 
I need to pass 2 operand functions
⍺⍺ and ⍵⍵
 
Sure, but they are not part of the error message, are they?
 
⍵⍵ is the operand function {~⍵} for one case, and the other case ⍵⍵ is {2+⍵}
 
What is i at the time of the error?
 
7:26 PM
well it was working the previous refactor step where I replaced the dfns with the operand reference
i and ⍺ look right
⍵⍵ was the only thing I changed
 
Is there a way to pick a field out of an array of namespaces without doing {⍵.myfield}¨arr?
 
@xpqz arr.myfield
 
That sounds too good to be true.
 
no you're right, looks like I did a goof
 
@xpqz It is always fun to watch APL do C# better than C#.
 
7:31 PM
I was thinking that's exactly what I wanted, but didn't bother trying, because "surely there's no way"
 
s06_1←{({'n'=⊃⊃⊃⍵}s06_1a{~⍵})⍵}
is there a problem with that operator?
 
@xpqz another fun one is obj1.(obj2.something obj3.else) etc. and all those objs can be arrays of objs.
@nathanrogers Depend what you want it to do, of course. Parens are not needed here, btw.
 
(1000 1000⍴0)(⍺⍺ eval⍵⍵) ⍵
 
In fact, unless s06_1 will be called dyadically, s06_1←{'n'=⊃⊃⊃⍵}s06_1a{~⍵} should be enough
 
being passed this way, but ⍺ is undefined
getting VALUE ERROR
 
7:34 PM
@nathanrogers You're giving us way too little context to be able to help you.
How about posting all the relevant code together?
 
mok
s06_1a←{                                  ⍝ 6_1 Recursive Solution
    ind  ← {,{(⊃⍵)∘+¨⍳1+⊃|-/⍵}1↓¨⍵}      ⍝ ... The indices to set
    eval ← {                             ⍝ ...
        ~×≢⍵ : 1⊥,⍺                      ⍝ ... Not any? Then sum reduce
        i←ind (n←⊃⍵)                       ⍝ ... Current update indices)
        'e'=⊃⊃⊃⍵ : (⍵⍵@i ⊢ ⍺) ∇ 1↓⍵        ⍝ ... Toggle? Apply ~ to i in ⍺
        (0⌈({⍵ ⍺⍺ n}@i⊢⍺)) ∇ 1↓⍵               ⍝ ⍝ ... 0 or 1 at indices in ⍺
    }
    lights ← 1000 1000⍴0
ignore comments
they haven't been updated because I can't get the operands workign
oh
nah ⍺ VALUE ERROR still
 
OK, now we just need some quiet time to look at your code.
 
actually the comments still match
because this is the first case. second case is this
s06_2 ← {⍺+¯1+'f n'⍳⊃⊃⊃⍵} s06_1a {2+⍵}
,⊂('e' 0 0)('h' 100 100)
data is in the form of this
with any number of pairs
 
@nathanrogers I get:
      s06_1 data
10201
      s06_2 data
20402
 
no value error?
 
7:48 PM
Nope.
 
then perhaps its happening further down in the recursive call
sec
let me see if I can define an input that triggers it
 
What is your ⎕IO⎕ML?
 
⎕IO←0
⎕ML←1
 
I was using ⎕IO←1
Nah, same results with ⎕IO←0
 
rgr, sec
s06_1 (('f' 0 0)('h' 100 100))(('e' 0 0) ('h' 100 100))
that should do it
f for off
'n' = ⊃⊃⊃⍵ should return 0
because its not 'n' for on its 'f' for off
 
7:51 PM
OK, now I get a syntax error on s06_1a[6]
 
and I'm not trying to be terse, ust the first usable regex I could match :P
0⌈ shouldn't have any effect on this case
because its 0 1 or ~
 
what problem are you doing?
 
@nathanrogers ({⍵ ⍺⍺ n}@i⊢⍺) cannot be right as that would give a monadic operator as left operand of @
 
(0⌈({⍵ ⍺⍺ n}@i)⍺)∇ 1↓⍵
well that gives me a syntax error
 
Yes, because an operator cannot take an operator as operand.
Maybe you meant (⍺⍺{⍵ ⍺⍺ n}@i⊢⍺) instead?
 
7:54 PM
oh, right
⍺⍺ needs to be named
oops
 
Or just pass it in.
 
@Adám (or ⍺⍺∘n@i⊢⍺)
 
@dzaima Ninja'd. Yes.
 
alright that did it
 
Cool.
 
7:57 PM
thanks for that. I already went round the bend with it for too long :c
oh, here's a question
does ⍺⍺ and ⍵⍵ need to be recursively passed into ∇?
 
Btw, you don't need to assign n←⍵ now.
 
oh, right
that's cool
 
what is the full problem?
 
you need to complete part 1 to get part 2
 
@nathanrogers Not entirely sure what you're asking but in a dop, is equivalent to (⍺⍺∇∇⍵⍵) or (⍺⍺∇∇)
 
7:59 PM
I mean, I'm calling (⍺⍺ eval ⍵⍵) and eval is recursive
do I need to pass (⍺⍺∇⍵⍵) or no
 

« first day (1502 days earlier)      last day (1145 days later) »