diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-10-14 12:00:19 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-10-14 12:00:19 -0700 |
commit | 9635163bdc7f1d060b93896a7268f9bf9b1f39d2 (patch) | |
tree | 8ff7d98b03f4a99230494f33d7f47ef991d43fbb /apps/factorial.mu | |
parent | 48a056b6da03758bfb365c3a8bac7b849793f013 (diff) | |
download | mu-9635163bdc7f1d060b93896a7268f9bf9b1f39d2.tar.gz |
7029
Diffstat (limited to 'apps/factorial.mu')
-rw-r--r-- | apps/factorial.mu | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/apps/factorial.mu b/apps/factorial.mu index 7be73342..b477190d 100644 --- a/apps/factorial.mu +++ b/apps/factorial.mu @@ -15,10 +15,12 @@ fn factorial n: int -> result/eax: int { compare n 1 { break-if-> + # n <= 1; return 1 result <- copy 1 } { break-if-<= + # n > 1; return n * factorial(n-1) var tmp/ecx: int <- copy n tmp <- decrement result <- factorial tmp @@ -31,12 +33,13 @@ fn test-factorial { check-ints-equal result 0x78 "F - test-factorial" } -fn main args-on-stack: (addr array addr array byte) -> exit-status/ebx: int { +fn main args-on-stack: (addr array (addr array byte)) -> exit-status/ebx: int { var args/eax: (addr array addr array byte) <- copy args-on-stack - var tmp/ecx: int <- length args + # len = length(args) + var len/ecx: int <- length args $main-body: { - # if (len(args) <= 1) factorial(5) - compare tmp, 1 + # if (len <= 1) factorial(5) + compare len, 1 { break-if-> var tmp/eax: int <- factorial 5 |