Examine individual changes
This page allows you to examine the variables generated by the Abuse Filter for an individual change.
Variables generated for this change
Variable | Value |
---|---|
Edit count of the user (user_editcount) | 259 |
Name of the user account (user_name) | 'TenBillionPlusOne' |
Age of the user account (user_age) | 3037072 |
Page ID (page_id) | 22626 |
Page namespace (page_namespace) | 0 |
Page title (without namespace) (page_title) | 'Hakerh' |
Full page title (page_prefixedtitle) | 'Hakerh' |
Action (action) | 'edit' |
Edit summary/reason (summary) | '' |
Old content model (old_content_model) | 'wikitext' |
New content model (new_content_model) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext) | ''''Hakerh''' is an esolang by [[User:TBPO]] that imitates [[User:Hakerh400]]'s esolangs. I made a timestamp below to mark where my transformation into Hakerh400 begun:
[[User:TenBillionPlusOne|TB]][[User talk:TenBillionPlusOne|PO]] 11:32, 15 May 2025 (UTC)
== Syntax ==
The program consists of function definitions:
f(X) = Y
Where uppercase letters (except T, F and N) are any expressions.
T, F and N are built-in functions that return themselves.
f returns a function with name f.
<code>X(Y)</code> calls function X with argument Y.
<code>X[Y]</code> returns Y if <code>X[Y]</code> is T and N if isn't.
=== Syntactic sugar ===
There is some syntactic sugar to simplify and shorten the code. For example, <code>let a, b</code> is equivalement to:
a(x) = a
b(x) = b
<code>f(X,Y)</code> is equivalement to <code>f(X)(Y)</code>, and <code>f(X,Y) = Z</code> is equivalement to:
f(X) = g
g(Y) = Z
<code>f(X.Y) = Z</code>:
f(X) = Z
f(Y) = Z
<code>,</code> has higher priority over <code>.</code>, so <code>f(X.Y,Z) = W</code> is:
f(X) = g
f(Y) = g
g(Z) = W
If a function isn't defined and isn't an argument of any function on the execution stack, it returns a unique function that returns itself.
== Execution ==
Program execution:
* Take input.
* Check is it a valid Hakerh expression. If not, replace it with <code>_(_)</code>.
* Evaluate input as Hakerh expression.
* Output the result.
A function call <code>f(X)</code> is evaluated by the following:
* Iterate through the function definitions, starting from the first.
:: Current definition will be written as <code>g(Y) = Z</code>.
:* If <code>g</code> isn't <code>f</code> as the function, skip.
:* If X evaluates to N and Y is N, return N.
:* If X or Y evaluates to N, skip.
:* Replace all instances of <code>Y</code> in <code>Z</code> with <code>X</code> and return
* If no definition is found, evaluate X and return unique function which returns itself.
Recursion is not only allowed, but also encouraged.
== Examples ==
=== SKI Calculus ===
This proves it [[meta Turing-complete]].
I(x) = x
K(x,y) = x
S(x,y,z) = x(z,y(z))
=== Basic relations ===
eq(x,x) = T
eq(x,y) = F
!(F) = T
!(x) = F
or(F,F) = F
or(x,y) = T
and(T,T) = T
and(x,y) = F
nor(x,y) = !(or(x,y))
nand(x,y) = !(and(x,y))
neq(x,y) = !(eq(x,y))
apply(x,y) = x(y)
=== Natural numbers ===
let 0
N(0) = T
N(S(N[x])) = T
P(S(N[x])) = x
N(P(0)) = F
eq(S(a),S(b)) = eq(a,b)
alt(0) = F
alt(S(alt[x]) = F
alt(x) = T
nat(alt[x]) = F
[[Category:Languages]] [[Category:2025]] [[Category:Functional paradigm]] [[Category:Declarative paradigm]] [[Category:Unknown computational class]] [[Category:Unimplemented]]' |
New page wikitext, after the edit (new_wikitext) | ''''Hakerh''' is an esolang by [[User:TBPO]] that imitates [[User:Hakerh400]]'s esolangs. I made a timestamp below to mark where my transformation into Hakerh400 begun:
[[User:TenBillionPlusOne|TB]][[User talk:TenBillionPlusOne|PO]] 11:32, 15 May 2025 (UTC)
== Syntax ==
The program consists of function definitions:
f(X) = Y
Where uppercase letters (except T, F and N) are any expressions.
T, F and N are built-in functions that return themselves.
f returns a function with name f.
<code>X(Y)</code> calls function X with argument Y.
<code>X[Y]</code> returns Y if <code>X[Y]</code> is T and N if isn't.
=== Syntactic sugar ===
There is some syntactic sugar to simplify and shorten the code. For example, <code>let a, b</code> is equivalement to:
a(x) = a
b(x) = b
<code>f(X,Y)</code> is equivalement to <code>f(X)(Y)</code>, and <code>f(X,Y) = Z</code> is equivalement to:
f(X) = g
g(Y) = Z
<code>f(X.Y) = Z</code>:
f(X) = Z
f(Y) = Z
<code>,</code> has higher priority over <code>.</code>, so <code>f(X.Y,Z) = W</code> is:
f(X) = g
f(Y) = g
g(Z) = W
If a function isn't defined and isn't an argument of any function on the execution stack, it returns a unique function that returns itself.
== Execution ==
Program execution:
* Take input.
* Check is it a valid Hakerh expression. If not, replace it with <code>_(_)</code>.
* Evaluate input as Hakerh expression.
* Output the result.
A function call <code>f(X)</code> is evaluated by the following:
* Iterate through the function definitions, starting from the first.
:: Current definition will be written as <code>g(Y) = Z</code>.
:* If <code>g</code> isn't <code>f</code> as the function, skip.
:* If X evaluates to N and Y is N, return N.
:* If X or Y evaluates to N, skip.
:* Replace all instances of <code>Y</code> in <code>Z</code> with <code>X</code> and return
* If no definition is found, evaluate X and return unique function which returns itself.
Recursion is allowed.
== Intention ==
There are two reasons why I created this language:
* To begin the transformation into [[User:Hakerh400|Hakerh400]],
* To explore the simulation of sets and types by functions. Set can be simulated by a function that returns T if value is in the set and F otherwise. Set defined in such way can also simulate type, because <code>f[x]</code> in function definition causes the definition to be used only if x is in f.
== Examples ==
=== SKI Calculus ===
This proves it [[meta Turing-complete]].
I(x) = x
K(x,y) = x
S(x,y,z) = x(z,y(z))
=== Basic relations ===
eq(x,x) = T
eq(x,y) = F
!(F) = T
!(x) = F
or(F,F) = F
or(x,y) = T
and(T,T) = T
and(x,y) = F
nor(x,y) = !(or(x,y))
nand(x,y) = !(and(x,y))
neq(x,y) = !(eq(x,y))
apply(x,y) = x(y)
=== Natural numbers ===
let 0
N(0) = T
N(S(N[x])) = T
P(S(N[x])) = x
N(P(0)) = F
eq(S(a),S(b)) = eq(a,b)
alt(0) = F
alt(S(alt[x]) = F
alt(x) = T
nat(alt[x]) = F
[[Category:Languages]] [[Category:2025]] [[Category:Functional paradigm]] [[Category:Declarative paradigm]] [[Category:Unknown computational class]] [[Category:Unimplemented]]' |
Unified diff of changes made by edit (edit_diff) | '@@ -52,5 +52,11 @@
* If no definition is found, evaluate X and return unique function which returns itself.
-Recursion is not only allowed, but also encouraged.
+Recursion is allowed.
+
+== Intention ==
+
+There are two reasons why I created this language:
+* To begin the transformation into [[User:Hakerh400|Hakerh400]],
+* To explore the simulation of sets and types by functions. Set can be simulated by a function that returns T if value is in the set and F otherwise. Set defined in such way can also simulate type, because <code>f[x]</code> in function definition causes the definition to be used only if x is in f.
== Examples ==
' |
New page size (new_size) | 3077 |
Old page size (old_size) | 2674 |
Lines added in edit (added_lines) | [
0 => 'Recursion is allowed.',
1 => '',
2 => '== Intention ==',
3 => '',
4 => 'There are two reasons why I created this language:',
5 => '* To begin the transformation into [[User:Hakerh400|Hakerh400]],',
6 => '* To explore the simulation of sets and types by functions. Set can be simulated by a function that returns T if value is in the set and F otherwise. Set defined in such way can also simulate type, because <code>f[x]</code> in function definition causes the definition to be used only if x is in f.'
] |
Unix timestamp of change (timestamp) | '1747313919' |