RosettaCodeData/Task/Church-numerals/Applesoft-BASIC/church-numerals.basic
2026-04-30 12:34:36 -04:00

29 lines
1.5 KiB
Text

0 DIM OP(13),N(13),X(13,1):READ OP(ZERO),N(ZERO),X(ZERO,0),X(ZERO,1):CN = CN + 1:DATA1,0,0,1
1 C = ZERO:GOSUB 10:C=R:GOSUB 10:C=R:GOSUB 10:THREE = R
2 C = THREE :GOSUB 10:FOUR = R
3 C = THREE :GOSUB 80:PRINT "THREE -> "R
4 C = FOUR :GOSUB 80:PRINT "FOUR -> "R
5 C = THREE:D = FOUR :GOSUB 50:C = R:GOSUB 80:PRINT "THREE + FOUR -> "R
6 C = THREE:D = FOUR :GOSUB 60:C = R:GOSUB 80:PRINT "THREE * FOUR -> "R
7 C = THREE:D = FOUR :GOSUB 70:C = R:GOSUB 80:PRINT "THREE ^ FOUR -> "R
8 C = FOUR :D = THREE:GOSUB 70:C = R:GOSUB 80:PRINT "FOUR ^ THREE -> "R
9 I = 5 :GOSUB 90:C = R:GOSUB 80:PRINT "5 -> FIVE -> "R;:END
REM SUCC
10 R = CN:OP(R) = OP(C):N(R) = N(C) + 1:X(R,0) = X(C,0):X(R,1) = X(C,1):CN = CN + 1:RETURN
REM SUM
20 FOR I = 1 TO N:A = A + B:NEXT I:R = A:RETURN
REM MUL
30 FOR I = 1 TO N:A = A * B:NEXT I:R = A:RETURN
REM POW
40 FOR I = 1 TO N:A = A ^ B:NEXT I:R = INT (A):RETURN
REM CHURCH SUM
50 RES = CN:OP(RES) = 1:N(RES) = 1:X(RES,0) = N(C):X(RES,1) = N(D):CN = CN + 1:R = RES:RETURN
REM CHURCH MUL
60 RES = CN:OP(RES) = 2:N(RES) = 1:X(RES,0) = N(C):X(RES,1) = N(D):CN = CN + 1:R = RES:RETURN
REM CHURCH POW
70 RES = CN:OP(RES) = 3:N(RES) = 1:X(RES,0) = N(C):X(RES,1) = N(D):CN = CN + 1:R = RES:RETURN
REM CHURCH TO NUM
80 N = N(C):A = X(C,0):B = X(C,1):ON OP(C) GOTO 20,30,40:STOP
REM NUM TO CHURCH
90 R = ZERO:IF I = 0 THEN RETURN
91 I = I - 1:GOSUB 90:C = R:GOTO 10"SUCC