RIfP

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 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.
Category:Languages Category:Turing complete Category:Turing tarpits Category:String-rewriting paradigm Category:2023 Category:Implemented