bruh():bruh()

From Esolang
Jump to navigation Jump to search

bruh():bruh() is an esolang by User:None1 and pronouced "bruh bruh", it uses only built-in functions and custom functions.

Functions

There are two types of functions: custom functions and built-in functions.

Each function is given a random unique ID from 0 to 264-1, every time the program is executed, the ID of the function is reset when it is defined, but won't change during the execution.

bruh():bruh() has only one type: Unbounded unsigned integer (when 0 is subtracted it stays 0), so when a function is passed as an argument to another function, its ID is passed instead.

Custom functions

To define a custom function, use the following syntax:

functionname(arguments):expression

Function name and argument names can have any character except commas, parentheses, colons and line feeds. arguments are separated by commas.

When the function is called, it evaluates and returns the result of expression.

The name of function and the argument names cannot conflict with existing function names, otherwise a syntax error is raised.

All names in bruh():bruh() are case sensitive.

bruh() function

bruh() is indeed the most important custom function in bruh():bruh(), it is the entrypoint of a program, like the main() function in C. bruh() must take no arguments, and its return value is ignored. A program may not have a bruh() function, but would do nothing without it. Note that bruh() supports recursion, so the program below works as an infinite loop.

bruh():bruh()

built-in functions

There are these built-in functions:

Function What it does
in() Read an integer from user input and return it
inc() Read a character from user input and return its ASCII value
out(x) Output x as decimal without trailing space or line feed and return x
outc(x) Output the character with the same ASCII value as x and return x
add(a,b) Return a+b
sub(a,b) Return a-b
mul(a,b) Return a*b
div(a,b) Return the quotient of a/b
mod(a,b) Return the remainder of a/b
0()~9() Return corresponding integer (0~9)
a()~f() Return 10 to 15 respectively
if(a,b,c,params) If a is nonzero, call the function with the ID b with arguments params, otherwise call the function with the ID c with arguments params, return return value of corresponding function. This is the only function that can be called with a mutable number of arguments

EOF returns 0 in all input functions

Function calls

Call stack

Unlike other languages like Python and Java, bruh():bruh() needs a stack with infinite size, so the maximum number of recursion solely depends on your computer's memory.

Note that a function is only allowed to call functions defined before it, so the following program is invalid:

bruh():g()
g():g()

And this one is also invalid, because the ID of the g function hasn't been created yet:

bruh():if(0(),g,g)
g():g()

Other syntax

Whitespaces

Line feeds are not ignored in this esolang, but spaces and tabs are. So the following program is invalid because of name conflict:

br uh():br uh()
bruh():br uh()

Comments

; comments out all characters after it until the next line.

Example programs

Cat program

bruh():add(outc(inc()),bruh())

A+B problem

bruh():out(add(in(),in()))

Truth Machine

func():add(out(1()),func())
func2():out(0())
bruh():if(in(),func,func2)

Infinite loop

bruh():bruh()

It silently consumes memory until your computer dies.

Dice

bruh():out(mod(0,6()))

n-th Fibonacci number

null(x,y,n):sub(y,x)
fib(x,y,n):if(n,fib,null,y,add(x,y),sub(n,1))
bruh():out(fib(0,1,in()))

Factorial

one(x):1()
fac(x):mul(if(x,fac,one,sub(x,1)),x)
bruh():out(fac(in()))