# Guides/Language FAQ

# What is J?

The J programming language is unlike any other because it is a computational notation. That is, it has the form of a mathematical notation while incorporating many fundamental computing concepts as "symbols" made up of one to to six characters. This concise notation and J's interactivity speed up algorithm development by orders of magnitude compared to more conventional languages.

J is a powerful tool for algorithm expression and experimentation because it incorporates high-level array manipulation concepts in a logical, consistent notation. This allows you to quickly explore complex problems and express solutions succinctly.

J is a functional language but with imperative forms for flexibility. You can write J in both a purely functional manner - called "tacit" - or in an "impure" functional form - called "explicit" - with some constructs that mirror more conventional languages.

For some examples of the power and beauty of J, look at some of the Rosetta Code solutions: http://rosettacode.org/wiki/Category:J .

Also, take a look at notes on our past meetings: www.jsoftware.com/jwiki/NYCJUG .

## FAQs About the J Language

Is there a BNF description of J?

Why does *trace* produce an error?

How do I get the row sum of a table?

Why doesn't "A * B" matrix multiply the two matrices A and B?

Why does "+/@*: 1 2 3" give me 1 4 9 instead of 14?

Why does *+/ *:* a work, but when I say *foo =: +/ *:*, then *foo a* it doesn't work?

Why do I get spelling errors when I write x. and y.?

"1 2 3" makes a list of numbers, why doesn't "a b c" do that when they are all numeric?

Why do/don't these (similar items) match?

Why does "+/ % # 1 2 3" give me 0.333333 instead of the mean, 2?

How do I prompt a user for input?

Why does my function not work on each item in the argument? This is also answered here.