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