forked from defunkt/ReefVM
31 lines
368 B
Plaintext
31 lines
368 B
Plaintext
; Tail-recursive factorial function
|
|
; factorial(n, acc) = if n <= 1 then acc else factorial(n-1, n*acc)
|
|
MAKE_FUNCTION (n acc) .factorial_body
|
|
DUP
|
|
PUSH 5
|
|
PUSH 1
|
|
PUSH 2
|
|
PUSH 0
|
|
CALL
|
|
HALT
|
|
|
|
.factorial_body:
|
|
LOAD n
|
|
PUSH 1
|
|
LTE
|
|
JUMP_IF_FALSE .recurse
|
|
LOAD acc
|
|
RETURN
|
|
|
|
.recurse:
|
|
DUP
|
|
LOAD n
|
|
PUSH 1
|
|
SUB
|
|
LOAD n
|
|
LOAD acc
|
|
MUL
|
|
PUSH 2
|
|
PUSH 0
|
|
TAIL_CALL
|