backpackr is a stack-based themed language that uses a two-dimensional plane of stacks to store information. The backpacker is a pointer with a bag (an additional stack) that can move around in the two dimensional stack space, placing and picking up integers.
the current implementation of backpackr has the following commands:
|w||move the pointer one stack forward|
|s||move the pointer one stack backward|
|a||move the pointer one stack left|
|d||move the pointer one stack right|
|p||place an object on the stack the backpacker is standing on. If p is followed by an integer, it places that integer down. Otherwise, the top item in the backpack is popped. If the backpack is emptied, the command is ignored|
|l||pop an item off the stack the backpacker is standing on. if the ground is empty, ignore|
|e||empty the contents of the bag out onto stdout|
|t||pop the topmost item from the bag and write it to stdout|
|c||peeks at the top item in the bag, then adds it to the top item in the stack that the backpacker is standing on. If that stack is empty, then push it on.|
|r||same as c, but instead subtract|
|g||empty the bag onto the stack that the backpacker is standing on|
|v||jump down n lines. must be followed by an integer|
|^||jump up n lines. must be followed by an integer|
|m||take a single integer from stdin and push it onto the backpack|
|h||go home, or stack 0,0|
|f||pop and compare both the bag and the stack that the backpacker is standing on. If they match, continue. If not, skip to the next line|
|u||examine the stack that the backpacker is standing on. If it is empty, continue. Otherwise, skip to the next line.|
|x||take the contents of the bag and look for a file with that name. Run the backpacker on that path using the same terrain as the parent file|
|k||destroy the contents of the bag|
|z||destroy the contents of the stack that the backpacker is standing on|
backpackr ignores any characters other than the above commands and numerals, including spaces, so using uppercase comments, arrows, and punctuation is useful when writing programs. Newlines, however are used by the jump and conditional commands, so being conscious of those is necessary.
Anything that is invalid is ignored by backpackr. If a command cannot be executed, the program moves on.
When an integer is enumerated to stdout, it, by default will display the ascii-encoded value of that integer. In order to display an integer, prefix it with a 0.
Endlessly enumerating iterative fibonacci sequence
ap0dp1 alcp0le dlcp0lp10le lcacwgslcp0lp10le lcdcwgslcp0lp10le ^2 p10le
Recursive fibonacci using two files: hf.bpkr
p10lp98lp105lp102le PRINT "ENTER A NUMBER" p10lp58lp114lp101lp98lp109lp117lp110l p32lp97lp32lp114lp101lp116lp110lp101le wap1dp0ssamp INITIATE CONDITIONAL VALUES AND ITERATOR h ap0ddp1 SETUP FIB ARGUMENTS h p102lx CALL F
hwlcssalcpfv6 CHECK CONDITIIONAL hwalcdck INCREMENT COUNTER hp10lalc(p0l)elcddckh PRINT AND ADD(QUASI N-TWO) ZERO PUSHED TO PRINT INTEGER(IN PARENS) wlcssalcpfv3 CHECK CONDITIIONAL hwalcdck INCREMENT COUNTER hp10ldlcp0lelcaackh PRINT AND ADD(QUASI N-ONE) p102lx CALL SELF
The program f takes advantage of the inherent scopelessness of backpackr and access pre-stored stacks as parameters.
Although backpackr is not formally proven Turing-Complete, it has all the attributes of a Turing-complete language. Informal evidence of Turing-completeness:
- backpackr's ability to emulate k-stack PDAs, which are proven to be equivalent in robustness to Turing machines.
- the infinite stack field that the backpacker operates on.
- Working backpackr interpreter in Python3