We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

Caca

From Esolang
Jump to navigation Jump to search
Caca
Designed by User:Mari
Appeared in 2024
Computational class Unknown computational class
Reference implementation Scratch
Influenced by Brainfuck
File extension(s) .caca, .cns (nourmaelscript)

"Caca" is an esolang created by User:Mari on May 22nd, 2024. It's first interpeter is written in scratch. It's namesake and commands are based on a Discord server called "Progresscord"'s Humor, of saying "I caca", and sometimes using a sticker which is an edited version of Icoeye's logo with eyebrows, 1 eyebrow raised, a weird smirk and the caption "I caca" in the top corner in impact font. It is described as being "crappy and likely unfunny"

edited version of Icoeye's logo with eyebrows, 1 eyebrow raised, a weird smirk and the caption "I caca" in the top corner in impact font.
HD Remake of Sticker in Question

Commands

Command (caca) Command (nourmaelscript) Description
icaca out print ascii character (of selected value) to screen
icacac inc add 1 to selected value
icac dec remove 1 from selected value
cacaca<INT> repeat<INT> loop line succeeding for value specified
icacan sq square the selected value
youcaca input ask user for input, numbers only (input is added to the selected value)
cacato<INT> goto<INT> jump to a specific line number
nocaca prev switch to previous value in caca stack
yescaca next switch to next value in caca stack
newcaca addnum add new value index to stack (there is 1 by default)
icaca? ifp execute line succeeding if selected value is positive
nocaca? ifn execute line succeeding if selected value is negative
zecaca? ifz execute line succeeding if selected value is 0
cacacaca copy clone current selected value to stack

Examples

this is a hello world program written in Caca:

cacaca72
icacac
icaca
cacaca3
icac
icaca
cacaca7
icacac
icaca
icaca
cacaca3
icacac
icaca
cacaca47
icac
icaca
cacaca55
icacac
icaca
cacaca8
icac
icaca
cacaca3
icacac
icaca
cacaca6
icac
icaca
cacaca8
icac
icaca

This code is mostly illegible, but basically it uses cacaca#### to run an increment(icacac)/decrement(icac) on loop, and it then uses icaca to print the ascii character corresponding with the value.

this is a truth machine:

youcaca
newcaca
zecaca?
cacato12
nocaca?
cacato12
yescaca
cacaca49
icacac
icaca
cacato10
yescaca
cacaca48
icacac
icaca

as Caca code is, its mostly illegible. basically, it uses youcaca to ask for user input (Caca can only handle numbers as input), then, if the number is a 0 or a negative, it goes to the end using a cacato statement, which then outputs one 0 then stops, but if its positive, it then goes on to printing 1, then goes back and prints 1 using a cacato statement

Trivia

  • Caca is (at least) the 2nd Esolang inspired by Progresscord, with the first being guh, however, Caca is implemented, while guh remains unimplemented. Also, Caca might be turing complete, while Guh is not due to lack of Conditional Execution.
  • Originally, the command called 'zecaca?' was called 'nucaca?', but however scratch's bad word detector detected nucaca as a bad word so I had it changed to 'zecaca?'
  • It is one of many languages to feature a Nope. Interpreter.
  • Upgrades to Caca such as String Caca (Caca with strings), Absolute Caca (Caca with absolute number support, rather than all relative increments or decrements), and Caca Pro (Caca with improved control flow) do not actually exist.
  • Despite the memory being called a Stack, its memory acts more like a Cell-based, rather than a stacking one
  • A wimpmode for Caca exists called "nourmaelscript" which maps the caca instructions to human readable ones (listed in parenthesizes next to the canonical caca instructions). It has no execution difference.

Implementations