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.
Wumbo-Flak
Wumbo-Flak is a derivative/minimisation of Brain-Flak, but in a different manner to Mini-Flak.
Specification
Wumbo-Flak's main storage is two stacks of bits/booleans, one being "active" and the other being "inactive". Both stacks are initially an infinite stack of False.
Wumbo-Flak has two sorts of commands: nilads and monads. A program as a whole is just a list of commands, which are executed in sequence when the program is run.
Nilads are commands that take no arguments; when executed, they possibly change the stack, then return a bit. There are three nilads:
(): Always returns True.{}: Pops the stack, and returns the popped value.<>: Switches the active and inactive stacks.
Monads are commands that refer to a nonempty list of other commands (sort-of like blocks in other languages). The monad is written as a pair of grouping characters with the other commands it refers to placed inside the monad (e.g. (()()) is a (…) monad which refers to two () nilads). The commands referred to by the monad are not automatically executed when the monad is (although most of the time, the monad will execute them as part of its effect). Just like nilads, monads will do something when executed (possibly changing the stack), then return an integer. There are two monads:
(…): Execute all the referred-to-commands, (logical) ORing together their return values. Push the resulting OR of return values onto the stack, and return it (in addition to pushing it onto the stack). (i.e. if any command inside returns True, push True, else push False){…}: If the top element of the stack is False, do nothing and return False. Otherwise, execute all the referred-to commands, ORing together their return values, then execute this{…}command again, ORing on its return value. Return the resulting OR of return values. (For example, if there are three Trues on top of the stack and the rest of the stack is zeroes,{{}}will pop the stack three times and return True.) There are no changes to the stack beyond those made by the referred-to commands.
In addition to writing commands, some implementations allow comments, which go from # to the end of the line. Invalid uses of the ()[]{}<> characters are undefined behaviour. Other invalid characters are typically ignored.
Comparison to Mini-Flak
Whereas Mini-Flak takes away the second stack from Brain-Flak, Wumbo-Flak instead takes away the negative integers. Without negative integers, sums can only be zero if all of the commands in the sum return zero, thus it's impossible to tell a 1 apart from a 2, and either of those from a 3, etc. This means that it's possible to treat each element of both stacks as a boolean value instead, with zero being False and any positive integer being True.
Computational class
Wumbo-Flak is Turing complete, as Boolfuck minus the I/O commands can be compiled to it:
| Boolfuck | Wumbo-Flak |
|---|---|
[ |
{
|
] |
<><>}
|
< |
({}<>)<>
|
> |
<>({}<>)
|
+ |
<>(())<>{{}<>{}<>((<>)<>)}{}<>({}<>)
|
It's also possible to implement a "set cell to 0" and "set cell to 1" instruction in a much simpler manner compared to the + construction:
| Boolfuck | Wumbo-Flak |
|---|---|
| set to 0 | {}(<><>)
|
| set to 1 | {}(())
|
Implementations
Wumbo-Flak is a strict subset of Brain-Flak, and thus is normally implemented using a Brain-Flak interpreter.