Introduction to 'j' and Foundational Concepts
TL;DR
J is a powerful, concise, and array-oriented programming language. It uses symbols to process data, especially numbers, in a way that often looks like math notation. Learning J involves getting comfortable with its unique syntax and "thinking in arrays."
1. The Mental Model
Think of J as a super-calculator that loves lists of numbers. You tell it what to do with symbols, and it instantly applies those operations across entire lists, not just one number at a time. It’s like describing a complex math problem elegantly.
2. The Core Material
J is a descendant of APL, known for its expressiveness and mathematical notation. It's often called a "tacit" or "point-free" language because you frequently operate on data without explicitly naming variables.
What is a "Verb" and a "Noun"?
In J, data are nouns (like numbers or arrays), and operations are verbs. Verbs can act in two ways:
* Monadic: Acting on one argument (like negation _).
* Dyadic: Acting on two arguments (like addition +).
Let's see some basic nouns and verbs:
5 NB. This is a noun: the number 5
_5 NB. This is a noun: negative 5 (underscore for negative)
+ 5 NB. This is a monadic verb: identity (result is 5)
- 5 NB. This is a monadic verb: negation (result is _5)
5 + 3 NB. This is a dyadic verb: addition (result is 8)
5 - 3 NB. This is a dyadic verb: subtraction (result is 2)
Notice the NB. – that's how you write comments in J. You'll run these commands in a J interpreter, like the J console.
Arrays are Fundamental
J excels at array processing. An array can be a single number, a list of numbers, or even a table.
1 2 3 NB. A simple list (rank 1 array)
Verbs naturally extend to arrays:
1 2 3 + 10 NB. Adds 10 to each element: 11 12 13
1 2 3 + 4 5 6 NB. Adds corresponding elements: 5 7 9
The Power of i. (Integers)
i. is an incredibly useful monadic verb that generates a sequence of integers starting from zero.
i. 5 NB. Generates 0 1 2 3 4
Introducing +/ (Sum) and other "Adverbs"
J has adverbs and conjunctions that modify verbs or combine them. +/ is an adverb that applies + between elements.
+/ 1 2 3 4 5 NB. Sums the elements: 1+2+3+4+5 = 15
This is called reduce. Other common reductions:
* */ (product)
* -/ (alternating sum/difference)
* </ (minimum