~

From Esolang
Jump to navigation Jump to search

~ 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();
# x y z|

is equal to the c statement:

if(x == y) pop_front();
else push_back(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 1 0|
{
	~|
	$|
	! 0 0 &|
	++ 0|
	~|
	! ^ 0 0|
	# 0 0 0|
	~|
}

External resources