about summary refs log tree commit diff stats
path: root/factorial.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-05 21:17:24 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-05 21:17:24 -0700
commitb96af395b9af2ff9df94b3e82213171f30827c8d (patch)
tree17c8c12648ccc25625e2534ec8d74fbe8f1542cc /factorial.mu
parent2e3b597fe85b654e82b891c22d50754fa5a26156 (diff)
downloadmu-b96af395b9af2ff9df94b3e82213171f30827c8d.tar.gz
1276 - make C++ version the default
I've tried to update the Readme, but there are at least a couple of issues.
Diffstat (limited to 'factorial.mu')
-rw-r--r--factorial.mu54
1 files changed, 34 insertions, 20 deletions
diff --git a/factorial.mu b/factorial.mu
index 96a28fd3..8dd2f23f 100644
--- a/factorial.mu
+++ b/factorial.mu
@@ -1,22 +1,36 @@
-(function factorial [
-  (default-space:space-address <- new space:literal 30:literal)
-  (n:integer <- next-input)
-  { begin
-    ; if n=0 return 1
-    (zero?:boolean <- equal n:integer 0:literal)
-    (break-unless zero?:boolean)
-    (reply 1:literal)
+# example program: compute the factorial of 5
+
+recipe main [
+  default-space:address:space <- new location:type, 30:literal
+  x:integer <- factorial 5:literal
+  $print [result: ]
+  $print x:integer
+  $print [
+]
+]
+
+recipe factorial [
+  default-space:address:array:location <- new location:type, 30:literal
+  n:integer <- next-ingredient
+  {
+    # if n=0 return 1
+    zero?:boolean <- equal n:integer, 0:literal
+    break-unless zero?:boolean
+    reply 1:literal
   }
-  ; return n*factorial(n-1)
-  (x:integer <- subtract n:integer 1:literal)
-  (subresult:integer <- factorial x:integer)
-  (result:integer <- multiply subresult:integer n:integer)
-  (reply result:integer)
-])
+  # return n * factorial(n - 1)
+  x:integer <- subtract n:integer, 1:literal
+  subresult:integer <- factorial x:integer
+  result:integer <- multiply subresult:integer, n:integer
+  reply result:integer
+]
 
-(function main [
-  (1:integer <- factorial 5:literal)
-  ($print (("result: " literal)))
-  (print-integer nil:literal/terminal 1:integer)
-  ($print (("\n" literal)))
-])
+# unit test
+scenario factorial-test [
+  run [
+    1:integer <- factorial 5:literal
+  ]
+  memory should contain [
+    1 <- 120
+  ]
+]