DOESNT
DOESNT is an esolang created by User:&0 at the very start of 2026. It's a single string, deterministic, rewriting system. Unlike conventional rewriting systems, rules in DOESNT list what prefixes are left unmatched. It's creation was inspired by the prompt for Language 18 from FORTY-FOUR ESOLANGS.
Language Description
A DOESNT program consist two parts. The initial state is given by the have statement:
have <initial state> ;
Rules are defined as followed:
give <string> unless <prefix to stop before>, <prefix to fail on> !!, <etc.> ;
Execution
State in DOESNT is stored in a ring buffer. When a rule is not prevented, it consumes the current prefix from the head of buffer, then queues the new symbols at the back. When no rules are evaluated, the buffer is rolled by a single value. If the buffer wraps around without any rules firing, the program will halt.
Given the following program:
give taken unless a , b , taken ; have a b c d e ;
DOENST produces the following output:
---: a b c d e 001: a b taken
Loosely inspred by Prolog, DOESNT features the !! (bail) operator. When a prefix is marked with !!, it causes the rule to immediately fail.
give taken-a unless a b !! , taken-a , taken-b ; give taken-b unless a b c , taken-a , taken-b ; have a b c d e ;
---: a b c d e 002: taken-b c d e 001: taken-b taken-a
As soon rule #1 hits a b ..., it fails. This allows rule #2 to take the prefix a b leaving c d e for rule #1. Without the bail operator, rule #2 is starved for execution:
give taken-a unless a b , taken-a , taken-b ; give taken-b unless a b c , taken-a , taken-b ; have a b c d e ;
---: a b c d e 001: taken-a b c d e 001: taken-a taken-a
Rules in DOESNT are greedy. When rule #1 reaches a b, it backtracks to take a. Then the next cycle starts with b c d e left in the queue, which rule #1 consumes all of.
Since DOESNT expresses states that are invalid for a given rule, the combinations of prefixes grows rapidly with the number of symbols. Finally, the Turing completeness of DOESNT hasn't been proven. Furthermore, the language lacks any mechanism for I/O.
Example Programs
Addition
give a + unless b , a , + . !! , + b b , + b . , . ; give unless a , b , + b , . , + . ; have a a a a + b b b . ;
Bounce Cursor
This was the primary reason for adding !! to DOESNT. As far as I can tell, without a hard "stop" operation, the leftward motion of a bouncing cursor is impossible.
give <& .
unless @ , * , . , &> * !! ;
give @ &>
unless * , . , <& , @ <& * , @ * !! , @ &> !! , &> , * &> !! ;
give * &>
unless @ , * , . , &> * * , &> . !! , &> * . ;
give * *
unless * * * , * * . , * . !! , . , <& , * <& !! , * * <& !!
, @ , &> , * &> !! , * * &> ;
give *
unless * * , * . , . , * <& !! , <& , @ , &> , * &> ;
give .
unless * , <& , @ , &> ;
give <& *
unless <& , * <& * , * <& . , &> , @ ;
have @ * * * * <& . ;
DOESNT Poem
Inspired by the Modal postcard.
have what is DOESNT? ;
give DOESNT is an esolang
unless DOESNT , is , an , esolang
, a , rewriting , system
, that , which , what is left !! , not , taken
, where , everything , backwards
, it , left , untaken , DOESNT. ;
give a rewriting system
unless DOESNT , is , what is left !!
, a , rewriting , system , where , everything , backwards
, it , left , untaken , DOESNT. ;
give where everything is backwards
unless DOESNT is an !! , what is left !!
, where , everything , is , backwards ,
, it , left , untaken , DOESNT. ;
give it is what is left untaken
unless DOESNT , is , an , esolang , a , rewriting , system
, it , what , left , untaken , DOESNT. ;
give DOESNT.
unless DOESNT. , what , is , DOESNT?
, DOESNT , an , esolang , a , rewriting , system
, where , everything , backwards ;
External Resources
- Lua implementation: https://www.sheeeeeeeep.art/raw/DOESNT.lua
- and's wikithing page about DOESNT: https://www.sheeeeeeeep.art/esolangs-doesnt.html