Not A Programming Language

Not A Programming Language, or NAP for short is a programming language that is not a programming language, created by User:PkmnQ. It is made for use in The Town of Not A Town (abbreviated to NAT Town), a town notable for violating many laws of physics and mathematics, as other programming languages were not contradictory enough to be useful for NAT Town purposes.
== Example Code ==
=== Hello World ===
 "Hello, World!"
=== 99 bottles of beer ===
 c I 99 1 {"{1:[I] bottles of beer} on the wall,\n{1}.\nTake one down, pass it around,"; s; "{1}"}
=== Recursive Factorial ===
 f Fact N {i (e N 0) {r 1}; i (g N 0) {r [N*Fact [N-1]]}}
=== Iterative Factorial ===
 f Fact N {e 1; c I 1 N {d J; e [J*I]}; d J; r J}
== Syntax ==
=== Printing ===
Printing constant strings is easy:
 "String goes here"
Escaping is simple.
 "I can escape quotes (\") using backslashes (\\)"
To add newlines, do this:
 "One line\nAnother line"
You can add expressions like so:
 "Variable I has the value [I]"
If there are repeated substrings, you can do this:
 "James, while John {1:had} {1} \"{1}\", {1} {1} \"{1} {1}\". \"Had {1}\" {1} {1} a better effect on the teacher."
You can even nest substrings inside other substrings.
 "James, while John {2:{1:had} {1}} \"{1}\", {2} \"{2}\". \"Had {1}\" {2} a better effect on the teacher."
=== Commands ===
Commands are separated by semicolons.
Opcode	Arguments 	Description
a 	var, expr 	Increments the variable by expr.
c 	var, exprStart, exprEnd	A count loop. Sets var to exprStart and either increments or decrements to exprEnd. Basically, a simple form of a for loop.
d 	var 	Dequeues a value from the queue and sets the variable to it.
e 	expr 	Enqueues an expression to the queue.
f 	name, args, block 	Defines a new function. The name is required to start with an uppercase letter, like variables.
i 	cond, block 	If the condition is true, the block gets run.
r 	expr 	Returns the value for a function.
s 	 	Advances the count loop.
u 	cond, block 	Until the condition is true, the block gets run.
w 	cond, block 	While the condition is true, the block gets run.
x 	block 	Comment (do nothing)
=== Conditions ===
Conditions have a similar syntax to commands, but they're surrounded with parentheses.
 (h fact 1)
Opcode	Arguments 	Description
a 	cond1, cond2	Reports if both conditions are true.
e 	expr1, expr2	Reports if the result of the 2 expressions are equal.
f 	 	Always reports false.
g 	expr1, expr2	Reports if the result of expr1 is greater than the result of expr2.
h 	func, args 	Reports if func halts for the args.
l 	expr1, expr2	Reports if the result of expr1 is less than the result of expr2.
n 	cond 	Negates the condition.
o 	cond1, cond2	Reports if at least one condition is true.
t 	 	Always reports true.
=== Expressions ===
This section is incomplete.
Expressions are made up of one or more values or other expressions. They are enclosed in brackets, unless inside other expressions or consist of only one value:
 [N+1]
==== Operators ====
===== Unary Operators =====
This section is incomplete.
===== Binary Operators =====
This section is incomplete.
===== Custom Functions =====
This section is incomplete.
=== Values ===
Values are either numbers or variables.
=== Variables ===
This section is incomplete.
Variables need to start with a capital letter.
 I
To set a variable, you can use the queue.
 e 1; d I; x {"set to number"}
 e C; d I; x {"set to variable"}
Alternatively, with the -d flag (autodeclare), all variables are automatically declared with 0, and you can use the a command instead.
 a I 1; x {"set to number"}
 a I C; x {"set to variable"}
=== Blocks ===
This section is incomplete.
Blocks are codes encased in curly brackets. They're usually used for flow control.
 {"This is a block"}
Category:2021 Category:Uncomputable Category:Languages