Pompidou 11 hours ago

R is also an array language, but a non-iversonian one. Another good ressource for array languages is https://aplwiki.com/.

r/apljk on reddit is also active.

  • countrymile 8 hours ago

    That's my understanding too. R never seems to make these lists.

seanhunter 10 hours ago

At one time I briefly spent a bunch of time learning kdb/q. I remember one particular day when I wrote a non-trivial program and it worked first time. I was so shocked I thought I must have suffered some kind of brain aneurism or something.

gcanyon 11 hours ago

Array languages are such a mind twist and so fun. I dabbled in J at one point, and I love explaining

+/%#

to people. But the real expressive power comes when you start to get into tacit expressions yourself, understand function exponents, and "get" under.

Hmmm... maybe I need a refresher...

  • 1-more 5 hours ago

    > I love explaining +/%#

    Based on the one thing I remember in APL I'm guessing the first two characters are "sum over some data structure" and the data structure is what the next two mean. What does it mean entirely?

    • Romario77 5 hours ago

      avg=: +/ % #

      +/ sums the items of the array.

      # counts the number of items in the array.

      % divides the sum by the number of items.

      • deepsun an hour ago

        I'd call that code obfuscation.

           a.sum() / a.count()
        
        you would not need an explanation.
      • 1-more 5 hours ago

        delightful, ty. How does it handle empty arrays? Throw? Average is zero? Average is infinity?

        • bear8642 4 hours ago

          Average is zero

               empty =. 0$0 NB. zero length array
               +/empty
            0
               #empty
            0
               0%0
            0
          • 1-more 2 hours ago

            Further validation for n / 0 = 0 in Elm and Pony and a couple other places! TYSM

graboid 3 hours ago

I assume that in most array languages, you also create "words" or however you want to call functions, to reuse code. I wonder about a purely aesthetic issue: how does it look to interleave those symbols with user-defined words that by nature will be much, much longer, i.e. "create-log-entry" or "calculate-estimated-revenue".

  • tailrecursion 3 hours ago

    I never did any real programming in APL, but I studied it over about 2 months. When you get used to the symbols, reading spelled-out words feels like reading in slow motion, or being stuck in molasses.

    Most (not all) APL code I've seen uses very short names, often one letter names, for function names. And APL programmers are famous for cataloging "idiom" which are short phrases for common subroutines. In other words, it's best practice to repeat 3- or 4- symbol phrases instead of defining a subroutine.

    Of course, there's nothing about an array language that requires using symbols; but for some reason most do.

    • ofalkaed 3 hours ago

      >Of course, there's nothing about an array language that requires using symbols; but for some reason most do.

      The idioms become words and you read them like words, you don't step through each letter of a word when you read it, you recognize the shape. The same thing happens in APL and its ilk, any commonly used sequence is instantly understood as its function without having to parse each individual symbol and what it does.

      • tailrecursion 2 hours ago

        Yes the symbols in a way are the letters of APL, and the phrases are the words.

thristian 11 hours ago

APL and K are still pretty daunting, but I've recently been dabbling in Lil[1], which is something like a cross between K and Lua. I can fall back on regular procedural code when I need to, but I appreciate being able to do things like:

    127 * sin (range sample_rate)*2*pi*freq_hz/sample_rate
This produces one second audio-clip of a "freq_hz" sine-wave, at the given sample-rate. The "range sample_rate" produces a list of integers from 0 to sample_rate, and all the other multiplications and divisions vectorise to apply to every item in the list. Even the "sin" operator transparently works on a list.

It also took me a little while to get used to the operator precedence (always right-to-left, no matter what), but it does indeed make expressions (and the compiler) simpler. The other thing that impresses me is being able to say:

    maximum:if x > y x else y end
...without grouping symbols around the condition or the statements. Well, I guess "end" is kind of a grouping symbol, but the language feels very clean and concise and fluent.

[1]: https://beyondloom.com/decker/lil.html

  • fainpul 10 hours ago

    I assume this is the same as this?

      # python
      [127 * sin(x * tau * freq / samplerate) for x in range(samplerate)]
    • zahlman 10 hours ago

      For that matter,

        # python
        from numpy import sin, arange, pi
        127 * sin(arange(samplerate) * 2 * pi * freq / samplerate)
    • thristian 10 hours ago

      Pretty much, yeah! The difference is that in Python the function that calculates a single value looks like:

          foo(x)
      
      ...while the function that calculates a batch of values looks like:

          [foo(x) for x in somelist]
      
      Meanwhile in Lil (and I'd guess APL and K), the one function works in both situations.

      You can get some nice speed-ups in Python by pushing iteration into a list comprehension, because it's more specialised in the byte-code than a for loop. It's a lot easier in Lil, since it often Just Works.

bee_rider 4 hours ago

Dumb question from an outsider: are array languages competitive with something like C or Fortran in their niche performance-wise?

  • gopalv 4 hours ago

    > are array languages competitive with something like C or Fortran

    The REPL is what matters - also while being performant.

    Someone asks you a question, you write something, you run it and say an answer, the next question is asked etc.

    I've seen these tools be invaluable in that model, over "write software, compile and run a thousand times" problems which C/Fortran lives in.

marcentusch 11 hours ago

This is cool. Wish there was more examples for jtye/k so I would have a better chance of learning to use it.

Also missing Uiua.

feraloink 12 hours ago

This is wonderful: APL is there! And a visual APL keyboard too.

nathell 11 hours ago

Is this written by Arthur Whitney himself?

srean 11 hours ago

It's missing Nial I think.

ludsan 11 hours ago

no uiua :(

  • evnu 10 hours ago

    Uiua is the first one that made array languages "click" for me due to the formatter.

  • etatoby 11 hours ago

    Came here to say the same thing. Uiua is my favorite language by far. BQN is also a cool "Nu-APL" but Uiua is just a full generation ahead.

    • ofalkaed 3 hours ago

      What makes Uiua a full generation ahead of BQN?

veridianCrest 9 hours ago

Array languages: where your first working program feels like a happy accident.

  • OneDeuxTriSeiGo 9 hours ago

    Programming in an array lang "should" generally feel like using a calculator.

    You are working in a REPL, starting with small expressions to verify they are roughly doing what you want and then composing them to build up until you can plug it all together and now have a formula you can plug into the calculator to plug and chug all the rest of your data.

    So in that sense yeah it does kind of replicate the magic of the first time you got a complex equation or BASIC program to run on your TI back in your school days.

JoshGG 11 hours ago

MATLAB is an array language.

  • cobbal 4 hours ago

    MATLAB doesn't even have 1-d arrays, it really is missing the principled and composable operations that make array languages useful

    • OneDeuxTriSeiGo 2 hours ago

      I believe the ArrayCast had this debate on whether it's considered an arraylang when they had some of the MATLAB devs on.

      The determination they came to was that MATLAB is an array lang but not an iversonian array lang.

  • ljosifov 6 hours ago

    Yeah - IDK why it never makes it to these lists. R too. Matlab being 2D matrix first/default gets it right for me there. IK matrices trivially translate to arrays, still: find 2D to be extra expressive on human level, for zero price paid. I get it it's all the same to the cpu. 2D rows-columns rectangle of data being the simplest data structure both necessary and sufficient covering a 1) matrix 2) spreadsheet 3) SQL table 4) directed graph of nodes and edges. (in the past I've read someplace that lists are for pie eaters, but wouldn't know myself

  • RodgerTheGreat 5 hours ago

    MATLAB doesn't have a FOSS implementation that runs in a browser.

    • bee_rider 4 hours ago

      Octave covers all the Matlab functionality I need, not sure if it runs in a browser. I mean if you have the source code for something there must be some way to get it to run in a browser these days, right?

  • radiator 11 hours ago

    it is one of their cousins