Defunc
Defunc is a function-based, minimalist esoteric programming language currently developed by User:Obvious. The language operates on functions that return integers. These functions can vary in input size. Its name comes from a portmanteau of "define" and "function"
Predefined functions
The language consists of 5 functions, which are as follows:
Function | Description |
---|---|
0 |
Returns a 0 |
+a |
Returns a+1 |
?abcd |
If a>b, return c, otherwise return d |
.a |
Writes a to the console, while returning it (Note: Defunc will output the actual integer and does not support ASCII) |
, |
Requests user input in the form of an integer |
Note that ?abcd
will evaluate a, b, and only one out of c and d. This also includes writing to the console. ?0.a0b
can therefore be used to write a and return b.
Other functions
Apart from the predefined functions, there are other functions as well. In a program you are able to define your own function, within the constraints of the programming language. To define a function, take a character that is not yet defined as a function or variable as the function name, then take any amount of characters that are not defined as a function for the variable names, and then give the function it should return. For example: >ab?abab
defines a >
function with variables a
and b
and outputs the greater.
Functions can refer to earlier functions, but also to themselves, to create a loop. You could for example write a sum function as Sabc?bcS+ab+ca
, which increments a and the counter variable c, until c reaches b. Then it returns a, which by then had b increments applied to it. Note that this function is capable of subtracting as well as the function would return a+b-c if b is greater than c and would return a otherwise.
Other Syntax
Anything must return exactly one argument. Iaa
is valid, as Ia
returns a
, but Iaaa
is not, as it would imply Ia
returns aa
, which are two arguments and not one. You should use a line break to separate the definitions/calculations.
Not everything has to be a definition. Executing a function has to be done as well.
Turing Completeness
This esoteric programming language has been proven Turing complete by the construction of a turing machine program interpreter within the programming language.
Examples
Hello, world!
4a++++a Ba44444444a LBBB4440 .+4444444.BB440 ..L .+++L .+++44444BB.B0 .+++.+++L .L .BBB40 .+B0
Due to output restrictions this will only output the decimal form of the ASCII codes
Cat
C?0.,0C C
The input is restricted to an integer
Fibonacci sequence
Sabc?bcS+ab+ca Fab?0.a0FbSab0 F0+0
Factorial
Arci?ciA+rc+ir *ab?b0Aa*aA0b+000 !a?a+0*a!A0a+0+0 .!,
Ackermann function
-ab?a+b-a+bb Aab?a0?b0A-a0Aa-b0A-a0+0+b .A,,
Truth-machine
Ta?.a0Ta0 T,
Turing machine
Sabc?bcS+ab+ca Mabcd?bdMabSac0+dc Eabcd?bdEabMac00+dc Dabcd?acDabSbc0+dd Rab?babRS0abb Iabcd?adIaDbc00c+dRbc Aabcd?b0?RCIbad0c++00ASEdbWIbad0c0aEdbIbad00+bDCIbad0c++000dASEdbWIbad0c0aEdbIbad00S0b+0DCIbad0c++000dAMad00+bcd (a=tape, b=index, c=current state, d=amount of possible states) Cab [insert your own chain of '?'-statements here, must return direction+2*newstate, with 0=left and 1=right] Wab [insert your own chain of '?'-statements here, must return the value to be written] (both use a=value, b=current state)