1,055 karma · joined July 21, 2017
Notice that aside from reverse (monadic |), all verb symbols in the above code are in most other languages (max as |, min as &, plus as +, minus as -). Adverbs (such as / for reduce and \ for scan-reduce) make the symbols we already have more generally applicable.
I think a language could go a long way with a small set of basic arithmetic symbols alongside a rich set of adverb symbols.
https://gist.github.com/chrispsn/da00835bb122c42f429a084df83...
The kparc.com links are down though.
https://ngn.codeberg.page/k/#eJxdjssKwjAQRffzFddVFyLFoiiFQD8...
Group tells you the places each element occurs in a list. It generates lists of indices.
(Π):!/: / make table
Π[`a `b
( 1 2
3 4)]First, direct links to ngn/k in the browser:
- REPL: https://ngn.bitbucket.io/k/#r
- Editor: https://ngn.bitbucket.io/k/
Second, the best one-stop shop for an overview of k6's primitives (both ngn/k and oK are based on k6). https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual....
The best intro examples are in John Earnest's k editor iKe - there's a dropdown at the bottom right. http://johnearnest.github.io/ok/ike/ike.html
ngn/k's editor also has an 'examples' dropdown in its menu.
For an illustration of k's strengths, Razetime's matmul refactoring is brilliant: https://github.com/razetime/ngn-k-tutorial/blob/main/c-think...
Finally, some nice examples of concise k:
{$[2>#?x;x;,/o'x@&'~:\x<*1?x]} / Quicksort
(+':,)\~!10 / Pascal's triangle
{x x}{x{x[x]y}y} / Y-combinator
Executable versions of above:- Quicksort (via Kelas's KCC guide): https://ngn.bitbucket.io/k/#eJwrLLaqVok2slO2r7CusNbRz1evcFBT...
- Pascal (via Richie/Attila): https://ngn.bitbucket.io/k/#eJzT0Fa30tGMqVM0NAAADYMCZg==
- Y-combinator (via ngn): https://ngn.bitbucket.io/k/#eJyLtKquUKiora6oroiuiK2srax14IqM...
K or LINQ?
Yep. For this reason deep where ideally wouldn't live on '&'. It should be able to absorb any structure for subsequent use with deep indexing etc, regardless of rank. Perhaps another reason to make 'explode' an adverb...?
Commercial k variants come with a columnar data store (see Kx's q/kdb+, Shakti's k9).
https://twitter.com/meshspreadsheet/status/13043816477064478... http://mesh-spreadsheet.com/ https://twitter.com/meshspreadsheet/status/12527139096409866...
`A 0: ("some";"lines";"are";"here"); / write to file A
`B 0: ("more";"lines";"follow";"here"); / write to file B
_/ 0:' `A`B / read files A, B and find lines of B that are not in A
more
follow A_Bk9 is in development, but blending k7 and k9 we'd get something like:
t: [[]sensor: 1 2 1 2 1 2
day: 1 1 2 2 1 1
reading: 1 2 3 4 5 6]
0 1 1 0 * select by sensor, day from t
sensor day|
------ ---|----------------
1 1 |[[]reading: 0 0]
1 2 |[[]reading: ,3]
2 1 |[[]reading: 2 6]
2 2 |[[]reading: ,0]You can do that in Excel too: whether it's the whole column of a sheet, or a column of a table - syntax for latter is `someTable[someColumnName]`. Mesh will have the latter, albeit with different syntax.
Thank you for the links! I will have a look. There's a deep history.
It might impact the 'flow' of modelling eg using automatic cell names like 'A1'. And it might complicate storing the sheet as text (might need to store more complex layout info than 'table is at coordinates x,y').
But it could also make layout easier, eg tables underneath each other could have different column widths. Could use CSS flow layout.
I also hadn't heard of Spreadsheet 2000 - great reference, thanks.
BTW - I think of the Mesh spreadsheet as a canvas, just a 'discrete' one as opposed to continuous. In theory, if the grain is fine enough (eg 1 character width of a monospace font), then you might be able to get the best of both discrete and continuous approaches.
I am working on Mesh Spreadsheet. It gives you a spreadsheet UI that writes code as text. It will likely use k9 as the formula language once it matures, but:
- you can try the JavaScript prototype at this link: http://mesh-spreadsheet.com
- you can see a proof of concept video using k here: https://www.youtube.com/watch?v=CEG9pFNYBCI
"abc"?"caz"
2 0 3