RETURN

RETURN is an esoteric programming language made by Ben Russell (the third one by this author so far), which incorporates a new theory, in which all commands are blank functions, that call other blank functions, and the commands are called by the number of functions passed through a function. It is called RETURN because commands are executed depending on the return codes, effectively.

Specification
The memory allocation is the same as in Brainfuck: 8-bits, planar.

The only symbols used are the two standard brackets ( and ). Everything else is a comment.

Commands are executed by the number of bracket groups in the current bracket group, e.g. ( ()  ()  () ) would do this: -> subtract 1 move pointer right subtract 1 subtract 1

Commands

 * 1. Add 1
 * 3. Subtract 1
 * 5. Move pointer right
 * 7. Move pointer left
 * 9. Put character (optional)
 * 11. Put number
 * 13. Get character (optional)
 * 15. Get number
 * 17. While nonzero repeat what's in the next group of brackets
 * 19. If nonzero skip next group of brackets
 * 21. While zero repeat what's in the next group of brackets
 * 23. If zero skip next group of brackets
 * 25. Exit with return code 0
 * 27. Exit with return code defined at pointer

All other numbers do nothing.

Hello World
Hello World! By thematrixeatsyou. ()()()()()()()() () (  ()   (()()()()()()()()())   ()   (()()()())   ()   (    ()()()()()    ()()()()()    ()()()   )   (    ()    ()    ()   ) ) () () (()()) (  ()  ()   ) ((((((())))))) () () ((())) () () () () ((((((((((((((())))))))))))))) () (()()) (((()))) (  ()  ()  () )(  ()  ()   ) ((   ()   ()   ()  )(   ()   ()   ()  )) (()()) ()()(((((((((()))))))))) () (((()))) Long enough for you?

This can also be expressed without whitespace; it looks damn awful when it's taken out.

Python Interpreter
This interpreter takes the input file, strips all non-bracket characters, puts an "A" after every opening bracket, puts an "A" at the start, puts ".run(Tape)" at the end, and then runs it. "A" is a special class to parse the RETURN stream.

NOTE: This is not the original interpreter; that's probably long gone. If anything fails, please prod me. I coded this thing in about an hour. --Ben Russell 19:51, 6 February 2010 (UTC)
 * 1) Scary RETURN interpreter
 * 2) By Ben "GreaseMonkey" Russell, 2010
 * 3) Public domain.

import sys

global GETCHBUF GETCHBUF = ""

def getch: while not GETCHBUF: GETCHBUF = raw_input("") c = GETCHBUF[0] GETCHBUF = GETCHBUF[1:] return c

def getint: v = 0 while True: c = ord(getch) - '0' if c >= 0 and c <= 9: v *= 10 v += c		else: break return v

class Tape: def __init__(self): self.l = [0] self.p = 0 def left(self): self.p -= 1 if self.p < 0: self.p = 0 def right(self): self.p += 1 while self.p >= len(self.l): self.l.append(0) def get(self): return self.l[self.p]

def put(self, v): self.l[self.p] = int(v) & 0xFF

class A:	def __init__(self, inv): self.cq = [] self.cv = 0 self.cp = None self.__call__(inv) def __call__(self, inv): if inv == self.__class__: self.cq.append(None) else: self.cq.append(inv) inv.cp = self self.cv += 1 return self def run(self, tape, ci = 0, first = True): i = 0 while i < len(self.cq): o = self.cq[i] if o:				i = o.run(tape, i, False) i += 1 if not first: i = ci			q = self.cv if q == 1: # 1. Add 1 tape.put(tape.get+1) elif q == 3: # 3. Subtract 1 tape.put(tape.get-1) elif q == 5: # 5. Move pointer right tape.right elif q == 7: # 7. Move pointer left tape.left elif q == 9: # 9. Put character (optional) sys.stdout.write(chr(tape.get)) elif q == 11: # 11. Put number sys.stdout.write(tape.get) elif q == 13: # 13. Get character (optional) tape.put(getch) elif q == 15: # 15. Get number tape.put(getint) elif q == 17: # 17. While nonzero repeat what's in the next group of brackets i += 1 o = self.cp.cq[i] while tape.get: if o:						o.run(tape, False) elif q == 19: # 19. If nonzero skip next group of brackets if not tape.get: i += 1 elif q == 21: # 21. While zero repeat what's in the next group of brackets i += 1 o = self.cp.cq[i] while not tape.get: if o:						o.run(tape, False) elif q == 23: # 23. If zero skip next group of brackets if tape.get: i += 1 elif q == 25: # 25. Exit with return code 0 sys.exit(0) elif q == 27: # 27. Exit with return code defined at pointer sys.exit(tape.get) return i

fp = open(sys.argv[1],"r") fdata = "" for c in fp.read: if c == "(":		fdata += "(A" elif c == ")":		fdata += ")"

fdata = "A" + fdata + ".run(Tape)"

exec fdata

External resources

 * RETURN interpreter this link is dead, if you've got the interpreter, I suggest you mirror it, otherwise, please prod me if the Python interpreter is crap --Ben Russell 19:51, 6 February 2010 (UTC)
 * This has been PD'd. Disregard the license, and do whatever you want with it. --Ben Russell 05:37, 12 August 2008 (UTC)