Computer For Number

From Esolang
Jump to navigation Jump to search

Computer For Number
A function for "a natural number",actually an array of interger.
All operations are on numbers,includes values,codes,variable for judgment,and instruction address.


Length(L): the range of each number.The number will be from -L to L-1 .
if a number becomes outsize of the range ,it should be made inside by add or sub by 2L
arr: An arr of intergers.
arr[Index]: The interger at n.Values are also able to be indexs.
C: arr[0] , The instruction address.
P: arr[1] , The variable for judgment.


loop to do the function until halt.

get C as arr[0] (referance,operations on these are the same as on values,not get value)
if C == 0 halt.
P as arr[1] (referance)
C1 as arr[C]
C2 as arr[C+1]
V1 as arr[C1] (referance)
V2 as arr[C2]
if P>=0 { set V1 as V1-V2 }

C# code (I believe you can know what it is)(return true means halt)

bool ComputerForNumberFn(Array arr) {
    ref int c =ref arr[0];
    if (c==0) return true;
    ref int p =ref arr[1];
    if (p<0) {
        int C1 = arr[c];
        int C2 = arr[c+1];
        ref int V1 =ref arr[C1];
        int V2 = arr[C2];
        V1 = V1 - V2;
        //arr[arr[c]] +=arr[arr[c + 1]];
    p = -p;
    c = c + 2;
    return false;

notice C1,C2 are also can be 0,or 1.

Computer For Number Marked

This language makes us able to know better about CFN program.
We can set a name for a number, and make use of it to make the program better.

Only match


All the texts didn't matched are annotation.


Set the Length as 128


Set a Name for the Index,and set arr[index] as Value.
(Name) is optional
Index is default to be last index +1
Value is default to be 0
<:> is required.
Value is also able to be Name,and it will be replaced by the index.
for example

<100(A):B> just a text

is equals to


Specially FromIndex=>ToIndex

<(TestFnAGotoB):C> jump to TestFnB

FromIndex=>ToIndex will be replaced to the value for goto
Specially <BitLength:BL> equals to <Length:2BL-1>
because it is easy to be implemented.




<(EndC):0><:EndV><(EndV):EndC=>0> Makes <C> <C> does halt

<(MulV2):82>   arguments
<(MulRes):>    result,=MulV1*MulV2


<(MulStart):MulTempV1><:MulV2>  <:MulTempV2><:MulTempV1>  <:MulV2><:MulV2>  <:MulV2><:MulTempV2>  <:MulTempV2><:MulTempV2>  <:MulTempV1><:MulTempV1>Set MulV2 Neg


<(MulLoop):P><:P>  <:P><:P>  <:MulRes><:MulV2>  <:MulV1><:V1> MulRes+ ,V1-=1 


<(MulGotoLoop):C><:MulGotoLoopV> if V1>=0 Loop

<:P><:P>  if V1<0 end





You can choose one
Cleaning programing: If you used a value,you'd better clear it after using.
Defensing programing:If you need a value,you'd better clear it at first.


It is obviously turing complete


This is a function for a number.(a)=>(a+1) is also a function for a number.Why CFN is turing complete but some not?

When ∞

when Length=∞
The operated numbers can be a Real number.
"the sharpened number" is actually a FUNCTION,"+1" is actually +dx

Chaitin's value

when Length isn't ∞ we can calculate it's Chaitin's value.