Defunc

From Esolang
Jump to navigation Jump to search

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)

External resources