forked from defunkt/ReefVM
29 lines
327 B
Plaintext
29 lines
327 B
Plaintext
; Tail-recursive factorial function
|
|
; factorial(n, acc) = if n <= 1 then acc else factorial(n-1, n*acc)
|
|
MAKE_FUNCTION (n acc) #21
|
|
DUP
|
|
PUSH 5
|
|
PUSH 1
|
|
PUSH 2
|
|
PUSH 0
|
|
CALL
|
|
HALT
|
|
; Function body
|
|
LOAD n
|
|
PUSH 1
|
|
LTE
|
|
JUMP_IF_FALSE #2
|
|
LOAD acc
|
|
RETURN
|
|
; Tail recursive call
|
|
DUP
|
|
LOAD n
|
|
PUSH 1
|
|
SUB
|
|
LOAD n
|
|
LOAD acc
|
|
MUL
|
|
PUSH 2
|
|
PUSH 0
|
|
TAIL_CALL
|