Example 16. Using Recursive Macros

.fcnolist fact1 .macro n .if n == 1 MVK globcnt, A1 ; Leave the answer in the A1 register. .else .eval 1, temp ; Compute the decrement of symbol n. .eval globcnt*temp, globcnt ; Multiply to get a new result. fact1 temp ; Recursive call. .endif .endm fact .macro n .if ! $iscons(n) ; Test that input is a constant. .emsg "Parm not a constant" .elseif n < 1 ; Type check input. MVK 0, A1 .else .var temp .asg n, globcnt fact1 n ; Perform recursive procedure .endif .endm