TisLoopy
A GEB
Bloop & Floop
Interpreter
NB. This is a comment. NB. The factorial procedure calculates N!. DEFINE PROCEDURE ''FACTORIAL'' [N]: BLOCK 0: BEGIN OUTPUT <= 1; CELL(0) <= 1; LOOP N TIMES: BLOCK 1: BEGIN OUTPUT <= OUTPUT x CELL(0); CELL(0) <= CELL(0) + 1; BLOCK 1: END; BLOCK 0: END. NB. The minus procedure calculates M-N. DEFINE PROCEDURE ''MINUS'' [M, N]: BLOCK 0: BEGIN OUTPUT <= 0; IF M < N, THEN: QUIT BLOCK 0; LOOP AT MOST M + 1 TIMES: BLOCK 1: BEGIN IF OUTPUT + N = M, THEN: ABORT LOOP 1; OUTPUT <= OUTPUT + 1; BLOCK 1: END; BLOCK 0: END. NB. The divide procedure calculates ⌊P/Q⌋. DEFINE PROCEDURE ''DIVIDE'' [P, Q]: BLOCK 0: BEGIN OUTPUT <= 0; IF Q < 1, THEN: QUIT BLOCK 0; CELL(0) <= P; LOOP AT MOST P TIMES: BLOCK 1: BEGIN IF CELL(0) < Q, THEN: QUIT BLOCK 0; CELL(0) <= MINUS [CELL(0), Q]; OUTPUT <= OUTPUT + 1; BLOCK 1: END; BLOCK 0: END. NB. The remainder procedure calculates P mod Q. DEFINE PROCEDURE ''REMAINDER'' [P, Q]: BLOCK 0: BEGIN NB. NB. Fill in your code here. NB. See: Homework 5, Question 4 NB. BLOCK 0: END. NB. The prime procedure returns 1 iff N is prime. DEFINE PROCEDURE ''PRIME'' [N]: BLOCK 0: BEGIN IF N = 0, THEN: QUIT BLOCK 0; CELL(0) <= 2; LOOP AT MOST MINUS [N, 2] TIMES: BLOCK 1: BEGIN IF REMAINDER [N, CELL(0)] = 0, THEN: QUIT BLOCK 0; CELL(0) <= CELL(0) + 1; BLOCK 1: END; OUTPUT <= 1; BLOCK 0: END. NB. The tortoise pair procedure returns 1 iff M NB. is prime and M+N is prime. DEFINE PROCEDURE ''TORTOISEPAIR'' [M, N]: BLOCK 0: BEGIN IF PRIME [M] = 1, THEN: IF PRIME [M + N] = 1, THEN: OUTPUT <= 1; BLOCK 0: END.
We are sorry, TisLoopy requires Javascript enabled to run, but it does not seem to be available.