: eval (run '+) (left '0) -> (left '1) (ran '+) ; : eval (run '+) (left '1) -> (right '0) (ran '+) +carry eval ; : +carry (left '0) -> (left '1) (shift bits left) ; : +carry (left '*) -> (left '*) (shift bits left) ; : +carry (left '1) -> (right '0) +carry ; : eval (run '-) (left '1) -> (left '0) (ran '-) eval ; : eval (run '-) (left '0) -> (right '1) (ran '-) -carry eval ; : -carry (left '0) -> (left '1) -carry ; : -carry (left '1) -> (left '0) (shift bits left) ; : -carry (left '*) -> (left '*) (shift bits left) ; : eval (run '<) -> (ran '<) (shift bits right) eval ; : (shift bits right) (left '*) -> (right '*) ; : (shift bits right) (left ?bit) -> (right ?bit) (shift bits right) ; : eval (run '>) (right '*) -> (left '*) (shift bits left) eval ; : (shift bits left) (right '*) -> (right '*) ; : (shift bits left) (right ?bit) -> (left ?bit) (shift bits left) ; : eval (run '[) (left "*00000000") -> (left "*00000000") (ran '[) (jump past matching bracket) ; : eval (run '[) -> (ran '[) ; : (jump past matching bracket) (balance '[) (run ']) -> (ran ']) (jump past matching bracket) ; : (jump past matching bracket) (run '[) -> (ran '[) (balance '[) (jump past matching bracket) ; : (jump past matching bracket) (run ']) -> (ran ']) eval ; : eval (run ']) (left "*00000000") -> (left "*00000000") (ran ']) ; : eval (run ']) -> (jump backwards to matching bracket) ; : (jump backwards to matching bracket) (balance ']) (ran '[) -> (run '[) (jump backwards to matching bracket) ; : (jump backwards to matching bracket) (ran ']) -> (run ']) (balance ']) (jump backwards to matching bracket) ; : (jump backwards to matching bracket) (ran '[) -> (run '[) eval ;