K is like APL with fewer built-ins. The syntax is ASCII-only, and most built-in functions are heavily overloaded single bytes of ASCII punctuation.
There are several implementations with subtly varying behavior. code.golf uses ngn/k, which is documented with the reference card found under "help" at the online interpreter. If you're new to K (and J, APL, etc...), this style of documentation might not be very helpful, but other learning material is available:
- Razetime has put together an extensive tutorial which introduces the language in multiple chapters, and then spends some time on solving larger tasks (including a Sudoku solver!).
- If you're looking for something in between the ref-card and a full blown tutorial, Stefan Kruger's kbook might be a good a fit.
- Another implementation of a similar K version is oK which comes with a more extensive manual
Example
Let's look at a program that outputs all of the input arguments with their length appended to them: `0:{x,$#x}'x
(Try it on United States: it outputs Nebraska8
Rhode Island12
…)
`0:{x,$#x}'x
x Get the list of inputs.
{ }' Apply some lambda function to each input.
({} makes a lambda, and the adverb ' means each.)
x x Inside a monad lambda, "x" refers to the single argument.
# Monad # means "length"
$ Monad $ means "convert to string"
, Dyad , means "concatenate"
`0: Output the list of strings line by line.
0: is a dyadic writing-lines-to-a-file verb,
and the left argument ` (the empty symbol) means "write to STDOUT".
You can see that K is essentially read and written "right-to-left", much like J and APL. x,$#x
means (x,($(#x)))
. There's no operator precedence.
Golf tips
\
preceded by a space is "trace" (an identity function for debugging that prints its argument to STDOUT). This can be shorter than using`0:
. Trace however passes its argument through the K formatter before printing, so this may only be useful for numbers.$[x;T;F]
can becomex{T}/F
whenx
is a non-negative integer.x
in the global scope is a list of the command line args.
External resources
- Matrix chat room specifically for ngn/k,
- The APL Farm has a room for K discussion,
- The K tree, a StackExchange chatroom about K. (inactive)