RIfP
Jump to navigation
Jump to search
RIfP (Replace If Possible) is an esolang by User:ChuckEsoteric08 inspired by /// and Novice.
Specefication
Memory in RIfP is stored in variables which contain arbitrary-long strings.
Command | Description |
---|---|
@x=y |
Declare variable x with value y .
|
!x y=z a |
If there is instance of y in value of variable x replace first instance of it with z and goto label a , else execute next instruction. If z is [] then replace with empty string.
|
;x |
Declare label x .
|
$x |
Outputs variable x .
|
Examples
Hello, World!
@hw=Hello, World! $hw
Truth Machine
@inp=0 ;loop $inp !inp 1=1 loop
Because this esolang has no input, input is stored into the inp
variable by the first line, you can change the first line to change the input.
Computational class
RIfP is Turing-complete because there is Cyclic Tag interpreter in it:
Replace 1
in first line with initial data and 011;10;101
on third line with program
@data=^1# ;replaceprogram @program=^011;10;101# ;interpret $data !data ^#=# halt !program ^0=0^ is0 !program ^1=1^ is1 !program ^;=;^ is; !program ^#=# loop ;is; !data ^1=^ interpret !data ^0=^ interpret ;is0 !data ^1=^1 append0 !data ^0=^0 interpret ;is1 !data ^1=^1 append1 !data ^0=^0 interpret ;append1 !data 0#=01# interpret !data 1#=11# interpret ;append0 !data 0#=00# interpret !data 1#=10# interpret ;loop !data #=# replaceprogram
Another proof is a brainfuck interpreter, which outputs in binary and has no input:
@program=&^++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.# @data=#^0000000000# @nest=@# @zero=0 @one=1 ;tobinary !program ^#=# endbinary !program ^+=>>>>>>>>[<]@>[@>]<<<<<<<<<[@]^ tobinary !program ^-=@>>>>>>>>@[<@]>[>]<<<<<<<<<[@]^ tobinary !program ^>=>>>>>>>>>^ tobinary !program ^<=<<<<<<<<<^ tobinary !program ^[=@[>>>>>>>>@[<@]>[>]<<<<<<<<<[@]>>>>>>>>[<]@>[@>]<<<<<<<<<@[@^ tobinary !program ^]=>>>>>>>>>@<<<<<<<<<]>>>>>>>>>[<<<<<<<<<@>>>>>>>>>@]<<<<<<<<<]^ tobinary !program ^.=>.>.>.>.>.>.>.>.<<<<<<<<^ tobinary !program #=# halt ;endbinary !program &=&^ interpet ;interpret !program ^#=# halt !program ^@=@^ flip !program ^>=>^ next !program ^<=<^ prev !program ^[=[^ sloop !program ^]=]^ eloop !program ^.=.^ out !program #=# halt ;flip !data ^0=^1 interpret !data ^1=^0 interpret !program #=# halt ;next !data ^0=0^ ifoutofbounds !data ^1=1^ ifoutofbounds ;prev !data 0^=^0 interpret !data 1^=^1 interpret !data #^=#^0 interpret ;ifoutofbounds !data ^#=^0# interpret !data #=# interpret ;sloop !data ^1=^1 interpret ;find] !program ^#=# halt !program ^@=@^ find] !program ^>=>^ find] !program ^<=<^ find] !program ^[=[^ [sloop !program ^]=]^ ]sloop !program ^.=.^ find] !program #=# halt ;[sloop @nest @=@* find] ;]sloop @nest @# interpret @nest *=[] find] ;eloop !data ^0=^0 interpret ;find[ !program #^=# halt !program @^=^@ find[ !program >^=^> find[ !program <^=^< find[ !program [^=^[ [eloop !program ]^=^] ]eloop !program .^=^. find[ !program &^=& halt ;]eloop !nest @# endeloop !nest *=[] find[ ;endeloop !program ^[=[^ interper ;0out !data ^0=^0 0out0 !data ^1=^1 0out1 !program #=# halt ;halt
Interpreter
- Common Lisp implementation of the RIfP programming language.