~

~ is an esoteric programming language created in 2006 by User:Tim_pettit. The basis of this language is to manipulate data on a single deque using only unary and ternary operators.

Syntax
All statements consist of a single operator followed by a "|" character to delimit each. (where ever x, y or z are used they should be replaced by only ^, & or an unsigned integer constant) (if people like the language ill post an interpreter so people can see the programs work)

The Ternary Operators: There are two ternary operators in ~ they are ! and # followed by three values delimeted by spaces.

! x y z| is equal to the c statement: if(x == y) push_front(z); else pop_back;

is equal to the c statement: if(x == y) pop_front; else push_back(z);
 * 1) x y z|

The Unary Operators: There are six unary operators in ~ they are +, -, ++, --, +- and -+.

+x| is equal to the c statement: pop_front; push_back(x);

-x| is equal to: pop_back; push_front(x);

++x| is equal to: push_back(pop_back + 1); push_front(x);

--x| is equal to: push_front(pop_front + 1); push_back(x);

+-x| is equal to: push_front(pop_front + x); push_back(pop_back - x);

-+x| is equal to: push_front(pop_front - x); push_back(pop_back + x);

With the operators there are also five Keywords represented as the symbols: ^, &, $, % and ~.

^: peek at the front of the deque &: peek at the back of the deque $: pop the front of the deque to stdout as a char and push a value from stdin (if there is no input 0 is pushed) onto the back. %: pop the back of the deque to stdout as an int and push a value from stdin (if there is no input 0 is pushed) onto the front; ~: swap the front and back values on the deque.

~ also has two loops which are used by encasing the code to be looped in the correct pair of brackets, either { } or [ ]. { }: works like a c while loop, it loops until the front of the deque is equal to zero, the condition is checked at the start of the loop. while(peek_front != 0) { /* do stuff */ }

[ ]: works like a c do loop, it loops until the back of the deque is equal to zero, the condition is checked at the end of the loop. do { /* do stuff */ } while(peek_back != 0);

Along with all this ~ allows unsigned integers to be entered as constants in the source code, however the deque is signed.

Sample Code
Here are two sample programs. The Mandatory Hello World ! 0 0 0 | ! 0 0 33 | ! 0 0 100 | ! 0 0 108 | ! 0 0 114 | ! 0 0 111 | ! 0 0 87 | !0 0 32 | ! 0 0 111 | ! 0 0 108 | ! 0 0 108 | ! 0 0 101 | ! 0 0 72 | { $ }

and A Cat Program ! 0 0 1| ! 0 0 1| { 	~| 	$| 	! 0 0 &| 	++ 0| 	~| 	! ^ 0 0| 	# 0 0 0| 	~| }
 * 1) 0 1 0|

External resources

 * Interpreter in Haskell
 * Interpreter in Java, unzip and run the .bat file to run