Also?

From Esolang
Jump to navigation Jump to search

Also? is an esolang created shortly after the creation of DyRM. It is quite the simple language, similarly to DyRM. It is also in part inspired by Minsky Machine. It is made up only one command, making it an OISC. It was created with the goal of finding stack transitions, which is similar in concept to UnCompetition.

Memory

Memory is stored on a stack. The stack has the alphabet of {*, ı, >}. The stack starts with only a ı

Semantics

Also? is technically a sort of metalanguage, that constructs a program that has to be ran by another language called STACKUNWISE, which will be described soon. Below is the syntax of the main command:

[x]
	y
	z

This command does the following:

  • Interpret x as a state transition expression written as former stack > current stack, with the leftmost symbol as the bottom one. Multiple transitions can be added to the statement using an & between each one.
  • Find the shortest STACKUNWISE program that takes the former stack and transforms it to the current stack.
  • Run that STACKUNWISE program on the current stack of the Also? program, and GOTO command(not line) y.
  • If the above was unsuccessful however, goto line z

STACKUNWISE

STACKUNWISE has the following commands, which affect a stack that also only uses the alphabet {*, ı, >}:

  • [][:] will loop the insides of the first brackets n times, where n is the amount of times : repeats.
  • {} will push each symbol within the brackets as an individual symbol, with the leftmost one being the one pushed first.
  • ;; will do the code behind the first colon if the symbol behind the second colon is equal to the top of the stack.
  • . will copy the top of the stack.
  • * will pop the top of the stack.
  • ' will reverse the stack

Also?'s computational class

Also? is Turing complete as BCT with a data string of 1 can be interpreted into Also? with the below table:

11:
[ı > ıı & * > *]
	next command
	next command
10
[ı > ı* & * > *]
	next command
	next command
0:
[ı > ]
 	next command
	next command

and the program must end in:

[ı > ı & * > * & > > >]
	0
	0

Note that in this translation, 1 is translated into ı, and 0 into *