RosettaCodeData/Task/Sudan-function/MAD/sudan-function.mad

40 lines
1.1 KiB
Plaintext

NORMAL MODE IS INTEGER
R WE HAVE TO DEFINE OUR OWN STACK FIRST
DIMENSION STACK(1000)
SET LIST TO STACK
R SUDAN FUNCTION
INTERNAL FUNCTION(N,X,Y)
ENTRY TO SUDAN.
R BASE CASES
WHENEVER N.E.0, FUNCTION RETURN X+Y
WHENEVER Y.E.0, FUNCTION RETURN X
R RECURSIVE CASE - WITH MANUAL STACK MANIPULATION
R NOTE WE DON'T NEED X AFTER THE FIRST CALL
SAVE RETURN
SAVE DATA N,Y
K = SUDAN.(N,X,Y-1)
RESTORE DATA N,Y
RESTORE RETURN
SAVE RETURN
K = SUDAN.(N-1, K, K+Y)
RESTORE RETURN
FUNCTION RETURN K
END OF FUNCTION
INTERNAL FUNCTION(N,X,Y)
ENTRY TO SHOW.
VECTOR VALUES FMT = $7HSUDAN.(,I1,1H,,I1,1H,,I1,4H) = ,I8*$
PRINT FORMAT FMT,N,X,Y,SUDAN.(N,X,Y)
END OF FUNCTION
SHOW.(1,3,3)
SHOW.(2,1,1)
SHOW.(2,2,1)
SHOW.(3,1,1)
END OF PROGRAM