Pure
Jump to navigation
Jump to search
Pure is a standardized version of Procedure created by User:A. Pure is case-insensitive and is expected to be much terser than Procedure programs.
Currently the only supported ports are STDIN
and STDOUT
.
connect to x
: Set the current port tox
. It only works if no ports are currently connected.disconnect from x
: Remove the current port,x
is a comment. It fails if there are already no ports connected.port x
: Output/Input according to the current port. If the current operand is a variable, you are allowed to quote the variable with single quotes.write x
: An alias forport
, intended for writing instructions.set x
: Another alias forport
, intended for reading instructions.
The rules of the connection include:
- If a port is already connected, any attempt to connect another port will fail.
- If there aren't ports connected already, the
port
instruction will fail to execute. - If the current connected port is
STDIN
, theport
command will read from STDIN, evaluate it, and set the variable to that value. - If the current connected port is
STDOUT
, theport
command will evaluate its argument, and output the evaluated thing to STDOUT. - Variables in Pure are weakly typed. That means you can change its type whenever you want by changing the type of the value it stores.
- The
to
andfrom
inconnect
anddisconnect
are optional respectively.
Comments and NOP instructions
- Lines are expected to end with the period
.
, although it's still possible to do without that. to
introduces a one-line comment that runs up to the period.
or a newline. It isn't expected to work if the previous string isconnect
.from
is an alias forto
. However, it works differently: It isn't expected to work if the previous string isdisconnect
.the
comments out the next word in the program, intended for backwards-compatibility with Procedure.
Datatypes
This section is merely for documenting Pure's type system.
Integers
Integers are a sequence of digits of [0-9]
that doesn't start with 0
.
A line of Pure
A line of Pure is expected to look like this:
N: Line of Code.
N
stands for the line number. It can either be an integer larger than 1
or repeat
(an anonymous line that isn't expected to be indexed). The trailing space after the colon is optional.
What does line of code
stand for?
line of code
is expected to be one of the Pure instructions. Here's a reference of all instructions:
connect to x
: Set the current port tox
. It only works if no ports are currently connected.disconnect from x
: Remove the current port,x
is a comment. It fails if there are already no ports connected.port x
: Output/Input according to the current port.write x
: An alias forport
, intended for writing instructions.set x
: Another alias forport
, intended for reading instructions.if condition, then go to step placeHolderStep; otherwise, go to step placeHolderStep.
A control flow instruction.Go to step placeHolderStep.
: Switch the control flow the the intended step.
Restrictions
- You can not go to a repeat step; instead, the steps have to be a non-negative integer.
- The
go to step
is optional in the conditional statement. - The
step
part in the control flow switching instruction is optional.
Hello, World!
1: Connect STDOUT. 2: Port "Hello, World!". 3: Disconnect STDOUT.
Infinite cat
1: Connect STDIN. 2: Port input. 3: Disconnect STDIN. 4: Connect STDOUT. 5: Port input. 6: Disconnect STDOUT. 7: Go to 1.
Truth-machine
1: Connect STDIN. 2: Port num. 3: Disconnect STDIN. 4: Connect STDOUT. 5: If num is equal to 1, then 6; otherwise, 8. 6: Port 1. 7: Go to 6. 8: Port 0. 9: Disconnect STDOUT.