A Queue which can't grow

From Esolang
Jump to navigation Jump to search

A Queue which can't grow (AQWCG) is an esolang by User:ChuckEsoteric08.


A Queue which can't grow uses a queue of integers to store data. Its initial state is set to user input with elements being seperated by ;
There are only two (three counting \ which is a nop) commands:


Which dequeues element, increments it, and enqueues result


Which dequeues element, If it's nonzero decrements it, and enqueues result. If it's zero it would enqueue zero and jump forward to matching \
Program never halts.

We could also define language so that it would use tape instead of queue:


Increments cell and moves right


If current cell is nonzero decrement it, and moves right. If it's zero it would move right and jump forward to matching \



This counter program simply increments all of the user inputs in a perpetual manner:



The following program expects two numbers, incrementing the second by the first one's value, and repeating the process by a reversal of the roles:


Computational class

AQWCG is Turing-complete because it's possible to translate Minsky machines to it. For simplicity we would use notation where x is length of a Queue and (commands:x) would execute commands x times.We could define command INC2 which would move left and increment cell:

INC2 = (|:x)(/\:x-1)

DEC2 would decrement instead:

DEC2 = (|:x-1)(/\:x)

SKIP code ENDSKIP would execute code if cell is nonzero. Note that code should end with pointer pointing to the same cell.

SKIP code = / INC2 code |

It's enough commands to compile Minsky machine to it. Queue is initialised as 0 followed by initial values of Minsky machine registers. That 0 is used as Instruction pointer for Minsky machine program.


  • Common Lisp implementation of the A Queue which can't grow programming language.