Goal: Embeddable array programming language with a bytecode interpreter in Go
anaseto.codeberg.page
anaseto.codeberg.page
That's great for Advent of Code and similar challenges where you have to do some ad-hoc input parsing but also super handy in general.
I want this so I can build features for end-users to provide snippets of code while knowing they won't be able to break anything, either accidentally or maliciously.
This is a surprisingly rare quality!
A common failure point here is allowing infinite loops ("while true") or allowing unbound mathematical operations, like powers or factorials of really large numbers.
+/1 2 3 4 5
meaning plus over 1 2 3 4 5
meaning the plus reduction of 1 2 3 4 5
meaning 1+2+3+4+5
meaning 15
"over" (/) is a higher order function that takes the function "+" and applies it to "1 2 3 4 5"over can also be used with *
*/1 2 3 4 5
meaning the product reduction of 1 2 3 4 5
meaning 120
"/" as "over" comes from a mathematical notation by Ken Iverson: APL (A Programming Language) [0][1] which Ken names "reduction" (h/t mlochbaum)> An operation (such as summation) which is applied to all components of a vector to produce a result of a simpler structure is called a reduction.
"/" is known as "insert" in J [2] and "over" in k dialects (like Goal)[3].
[0] https://en.wikipedia.org/wiki/APL_(programming_language)#Mat...
[1] https://www.softwarepreservation.org/projects/apl/Books/APRO...
"/" as "over" in k reference (see Chapter 5)
http://www.nsl.com/k/k2/k295/kreflite.pdf
and "over" in the Q reference:
Reference: https://codeberg.org/anaseto/goal/raw/branch/master/docs/hel...
Playground: https://anaseto.codeberg.page/try-goal/#eJwyNFI1AQAAAP__AQAA...