@Adám thanks. It's funny, while the core builtin verbs seem painstakingly thought-out and to fit together perfectly like a tangram, the stdlib ones seem a bit haphazard. I suppose the bar was lower there...
@Jonah Maybe because the built-ins were 4rd generation APL (Iverson notation, simple APL, boxed APL, J) while it was the first time they made a stdlib? Tellingly, no APL has a stdlib yet — though we're working on that…
I stumbled onto APL via a short stint trying to learn k/q - I thought I'd find the glyphs harder to decipher but (for me) I've found the opposite to be true.
Is the glyph set fixed, or as Dyalog versions are released, new ones are added?
@JeffZeitlin Why would you even want a copy? There's really nothing interesting there. It is basically a strangely stilted reformulation of IBM's documentation.
@JeffZeitlin I've added a Standards page to the APL Wiki. Please, if there's information about APL that you want, but can't find on that wiki, let me know (or put it there yourself).
@Adám - Generally speaking, I assume that the Standard describes an "ideal" implementation's behavior; I don't assume than any particular implementation conforms in every respect to the standard. If the standard is based on someone's implementation as a "reference implementation", I'm perfectly happy to have complete documentation for the reference implemenation instead.
@Adám (Frankly, given the work that Dyalog has put into their documentation, I wouldn't be unhappy about the idea of considering Dyalog to be a "reference implementation". Especially since both the 'terp and the docs can be had for only the cost in time and bandwidth that it takes to download.)
@xpqz It is. The websites for it look way slicker than any other APL vendors too. However, I have understood that APL2 users are murmuring about IBM's not adding any modern features. They are increasingly seeking to migrate to Dyalog. Mainframes are also significantly more expensive to maintain than PCs…
@Lulucmy Hi there. Interested in APL?
@xpqz Btw, my father worked for IBM too, a long time ago.
@JeffZeitlin I think Dyalog is becoming the new standard. While APL2 still looked strong, Dyalog advocated ⎕ML←3, but now the scales have tipped; we recommend ⎕ML←1 and most implementations follow Dyalog rather than IBM.
My father wanted experience in job-seeking, so he applied for a job he definitely wouldn't want. They tested the applicants, then did a second tier test of the highest scoring ones, and then asked my father How much do you want? He stated some ridiculous amount, like 3 times the salary a newly graduated civil engineer (MSc) would expect. They then asked When can you begin? Monday?
OK, APL-eusis has been created; I'd appreciate commentary and/or edits-to-improve.
@Adám - I will admit to liking one capability in NARS2000 that's not (yet) in Dyalog - rationals, entered using "r" notation (e.g., 2r3 for two-thirds).
@JeffZeitlin Why the dash in APL-eusis when the final L of APL combines with the L of Eleusis to make the perfectly sensible portmanteau APLeusis?
@JeffZeitlin Right. The dfns workspace provides the rats operator, but it isn't very convenient. One problem is that the introduction on rationals breaks that convention that "a number is a number".
@Adám - I was thinking that separating it out emphasized that the pronunciation is "ay pee ell yousis" rather than "app-lyousis". I'm not fanatic about the dash, however.
@Adám - I'm not sure I understand what you're implying in the sense of 2r3 rationals breaking "a number is a number". Doesn't the same idea apply to complex numbers using the j notation?
@Adám - Of course, there's also the question of using r notation and j notation together - is 3r2j1 interpreted as three over (two plus i), or as (three over two) plus i?
@Adám - OK, I think I begin to see what you're getting at; a better example would be that 2r3 is not the same value as 2÷3, and that also leads to the question of type mixing - should 1.5+(3r2) give the result 3r1, 3, or 3.0?
@Adám - which gets back to the question of "complex rationals" - does r bind more tightly than j, or is binding strictly right-to-left, or j more tightly than r, or ...?
(My inclination would be to make r bind more tightly than j - that is, 3r2j1 is three-halves plus i, not three over (two plus i).)
@JeffZeitlin Yes, the more "letters" we allow, the longer will the list of "letter precedence rules" be. We already have j and e where j binds stronger than e. One of the nice aspects of APL is exactly its lack of precedence rules!
@Lulucmy Ah, cool, so you're both into functional programming and interpreted programming. Does it ever bother you that those two use keywords in English and not, e.g. in French?
@Lulucmy Not at all. It seems very different at first, but when you let go of preconception, and just dive in, it is one of the easiest programming languages to get started with. Especially if you know a little basic mathematics.
@JeffZeitlin At what point does it become too much? J has a few such letters, making constants like 1b2b3e4b5b6j7b8b9e10b11b12e13b14b15j16b17b18e19b20b21r22b23b24e25b26b27j28b29b30j31b32b33e34b35b36perfectly valid.
@Lulucmy How are you with mathematics?
@JeffZeitlin I think it needs to code address restrictions even more. E.g. which constants are allowed in the code.
@Adám - Oh, ICK! No language should allow constants to be written like that.
Although I think some of that is an artifact of J using standard ASCII for things that APL uses symbols for. J's p-notation would be APL's (monadic) ○, for example, and I think J's x is APL's (monadic) *.
@JeffZeitlin Well, 1e2r3e4j5e6r7e8x9e10r11e12j13e14r15e16b17 is valid though, and not just base notation. Try it online!
@JeffZeitlin I disagree. J has o. for ○ and ^ for *. There is a value in being able to write 2e3 instead of 2×10*3 etc. Rather the other way around. J has j. which allows combing a real and an imaginary part. APL only has the j constant notation with no sleek way to combine parts.
The only thing I could come up with was to write a function J where ⍺ J ⍵ simply returns ⍺ + 0J1 × ⍵, and ⍺ R ⍵ (which I was starting out calling 'cisr') returns ⍺ × 2○⍵ J 1○⍵
@Lulucmy Indeed. APL may look foreign at first, but in fact, it strives to use mnemonic, universally understood symbols instead of being bound by ASCII and English words.
@Lulucmy So, now that / is free for something else. APL uses it to reduce a list. If we have a variable myNums then +/myNums is the sum of those numbers. Can you then guess what ×/myNums means?
@Adám - I'll probably end up sticking CISR, CISD, and J (functions) into a "stdlib" workspace, and just )COPY it into workspaces as needed. Until (if) Dyalog builds them in...
@Lulucmy Just like it takes time to learn all the keywords and ASCII symbol-sequences in other languages. Just like it takes time to learn human languages :-) But what you'll find is that APL actually has quite a limited vocabulary, and instead you combine symbols for simple concepts into compound meanings.
So, e.g. while other languages might have + and * for plus and times, and also sum() and product(). APL has + and × (which should be easier to learn than *, no?) and just / for reduction. Summation is +/ while finding the product is ×/.
@Lulucmy - I think you'll find that a lot of APL's basic symbols can be associated mnemonically with their functions - for example, ⌈ is both maximum of its two arguments, or round-up (ceiling) its single argument.
@Lulucmy Nothing like popular languages, but what it doesn't have in quantity, it has in quality and time. APL is very old and its adherents are almost like a big family.