4 ms·
I'm not discounting the language at all, by your comment here perhaps some application of a common mathematical function such as an average or the fibonacci seq
by snek 8y ago
I'm not discounting the language at all, by your comment here perhaps some application of a common mathematical function such as an average or the fibonacci sequence would be a good front page example.
- 4thaccount 8y agoThat would make sense. Maybe someone on their mailing list will take note (I'm just a lurker). If you want to see something really cool, look at the APL video for Conway's Game of Life on YouTube. If I recall correctly, Jon Scholes made that video a few years ago. I don't know him, but he was supposed to be an APL wizard and an all around good guy from what I've read. I was sad to read that he passed away recently.
- kwhitefoot 8y agoThat was brilliant! Thank you for making me aware of that video. It would be great if someone could translate that into J, then I might have a chance of understanding it properly.
- 4thaccount 8y agoThere might be a version on Rosetta Code.
- jodrellblank 8y agoI tried, although I don't speak J so it's a rough transliteration. I couldn't do the last GUI animated part without more knowledge of J's tools, but it can compute multiple generations. Code summary: r =. (3 3 $ i. 9) e. 1 2 3 4 7 R =. _1 |. _2 |."1 (5 7 {. r) RR =. 15 35 {. _10 _20 {. R life =. verb : '+./ > (1;y) *.each 3 4 =each +each/ +each/ 1 0 _1 |.each/ 1 0 _1 |."1 each <y' gen =. dyad : 'life ^: y x' The 20th generation: (RR gen 20) { '.X' ................................... ................................... ................................... ................................... .........X....XXX.................. ........XX.....XX.................. .......XX.....XX................... ........X.X...X.X.................. .........XX....XXXX................ ..........X...X..XX................ ..............X.XX................. ..............XXX.................. ................................... ................................... ................................... Transcript of the whole talk with line by line translation here: https://dpaste.de/OoEM/raw https://dpaste.de/OoEM/raw (expires in 7 days).
- kwhitefoot 8y agoThank you! That was great. Thanks for putting in the effort.
- jodrellblank 8y agoI don't know that J/APL have a good front page example - if it does nothing, it's not interesting. If it does a lot, it's intimidating off-putting gibberish. APL, rather than J, but here's a beautiful Prime Numbers up to 20 example: (~R∊(R∘.×R))/R←1↓⍳20 Reading right to left, iota 20 makes numbers 1 through 20 inclusive, 1 drop takes that list as an argument and removes the first element, R left arrow takes that shorter list as an argument and stores the numbers 2 through 20 into variable R. In the nested parens, the outer product multiplication pattern (R___R) makes a multiplication table of the vector R against itself, and because we dropped 1 from the list we avoid all the 1xN and Nx1 pairs so it's a table of composite numbers. Then outer parens R epsilon compares each item in R with the matrix of composite numbers and generates a boolean result vector the same size and shape as R, but each input number has become 1 if it was found as a composite number, 0 if it wasn't (aka prime). Negate that bitmask so 1 indicates where a prime number was in the original R numbers, and use / to filter (reduce) the original list to pick those out. Primes: Numbers 2..N which aren't members of all the products of 2..N. No explicit loops, no if/else branching, no proliferation of names for working arrays, no need to wrap it in a function, give the function a name, document the function parameters and their assumptions. And even though it is N-squared runtime, it's short enough that an interpreter could pick out that pattern in code and implement it faster behind the scenes, if that was beneficial, without forcing the programmer to interrupt neat code to appease the machine beneath. I can't APL or J, but I transliterate it to J as: (-. R e. ; R*/ R=: 2 }. i. 20) # R J starts counting at 0 so this drops two numbers from the list. (Yes, J has p: for making Prime numbers).