@TomCockram What are you replying to? (You can hover over a message and then click the revealed ↳ on the right to insert a special tag that not only pings the message author, but also indicates which message you're replying to.)
Oh I see, yes that would be useful if you set the different ones you're going to use from the start. Otherwise you might end up with so many different ones that you're not sure what to search!
@JeffZeitlin Well, it is certainly wrong, but that was a spurious initial slew of old articles when I enabled the feed. Let's see what happens when it detects actual new articles. Should be coming shortly…
Is there a built-in that takes two arguments (representing real and imaginary) and generates a complex from them? You can't do that using "straight up" J-notation unless the two numbers are constants.
@JeffZeitlin Windows IDE: Options>Configure>Help/DMX>Use online help for non-Dyalog topics>URL:"https://aplcart.info?q=%s". RIDE: Edit>Preferences>Menu>after the &Help line, insert &APLcart =https://aplcart.info lines up with the other entries.
OK, now it's not inadvisable. When it was inadvisable, (1+2) J (3+4) went into an infinite loop. After shutting down the terp and restarting it, it doesn't go into an infinite loop, but instead does what I wanted it to. Of course, I wanted it to do the wrong thing; I really want J←(⊣+¯11○⊢)
@JeffZeitlin Why not. I'd e.g. add ⍥, but now Dyalog is adding that. In fact, the best candidates for addition to the core language are probably those that would be most popular to add.
There's obvious danger for production code, but Dyalog already has ⎕ML they're trying to be rid of
I think APL would benefit from users being allowed to extend the core language in a more natural way, the convention could be that any symbolically defined functions should go at the very start of your whole app and you're a fool otherwise
It would also allow people to experiment with proposed language features in the way they would actually be used - including the aesthetic aspect
I actually like the idea of having ⎕ML - but if I evaluate it honestly, it's really the user's responsibility to "correct" code to match a newer 'terp.
if I can write a program - I can write a program to delete all files on the filesystem, why wouldn't I just write that every time I need to make an application?
@RichardPark Yeah. This is already an issue for programming languages with reserved words. It is hard to add words later if you don't allow overshadowing keywords. So some language pre-reserve words for the future. Thank goodness for APL's reserved ⎕ and : prefix characters for built-in things.
Given the nature of APL and its similarities to natural language, the ability to redefine and extend symbols would be good and probably outweigh the risks
Once again, a crazy fool would go around redefining built-ins for their production app
but I'm here in 17.1 making _O_←{(⍵⍵ ⍺)⍺⍺ ⍵⍵ ⍵} and I←⌷⍤0 99
@JeffZeitlin Sure, but case-in-point on the dangers. In Extended, I extended the ≠ with an (I think) very logical monadic form, but now in 18.0 Dyalog is making monadic ≠ be something entirely unrelated to dyadic ≠. Now what do I do with Extended once 18.0 comes out?
@RichardPark That's not what I meant. What happens to existing Extended code that uses monadic ≠. If I don't change ≠ according to Dyalog 18.0, it won't be Extended Dyalog anymore, it'll be a side branch with incompatibility.
@RichardPark APL prouds itself of half a century's backwards compatibility. Look, Dyalog didn't even dare making a braking change to 3 1 4[2] like IBM did.
If I were using the (admittedly simplistic, but oft-claimed) assumption that APL is evaluated strictly right-to-left, I'd expect IBM's behavior. But there are sufficient counterexamples to that simplistic assumption that it shouldn't be assumed.
@Adám Actually yes, common beginner's mistake because they are told APL is right-to-left and then stranding pops up like woah - also problematic because there's no stranding primitive for some convenient (f¦g) trains
That's one of the counterexamples. It's not strictly rtl; there is binding strength to account for. It's just complicated to articulate that to a beginner.
in Japanese they have a phrase narau yori nareru which is often translated to "practice makes perfect" but literally means "rather than learn/be taught, get used to"
I think was also one of the key points from the Liceo Scientifico talk from Dyalog '19 (youtube.com/watch?v=vvKdflXGT1o) - summed up in the phrase "teach without teaching" from the Japanese puzzle guy
This wouldn't have been an issue if we didn't have stranding. Iverson was actually against the introduction of stranding. His original notation didn't have it. Used proper array notation instead.
@JeffZeitlin I disagree. APLers are much more likely to criticise minute language warts than other programmers dealing with all sorts of wats and WTFs in their languages.
@JeffZeitlin Right, because in this case, ← acts more like a monadic operator, and you can't use ⍨ on that. Compare to x∘,¨y where you can't write y¨⍨x∘,
(2⌷Z)←5 is essentially Z(2∘⌷)←5
Meaning the ← takes a selection function as operand.
Anyhow, the right way to view ← in current APL is as its own syntax. Not a function or operator.
Oh, I didn't actually expect commuting the assignment to work; I was just making sure I tried everything. Parenthesizing the 2⌷Z seemed to be a waste as compared to Z[2].
I could probably do the vector case with a computation involving ⍴Z, but it would be more complicated, and let's not even think about what I'd have to do to select one or more ... yeah, that.