about summary refs log tree commit diff stats
path: root/cpp/core.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-04-03 12:53:33 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-04-03 12:53:33 -0700
commita8007cc4839609a293908423ea37e6fc3a52d1c8 (patch)
treebe77e1e36582500d163bd491aa2d2a5741644a94 /cpp/core.mu
parent07d35c4af3275b32f4b2e5d870faea67c1ea6285 (diff)
downloadmu-a8007cc4839609a293908423ea37e6fc3a52d1c8.tar.gz
1011 - string-equal now working
Diffstat (limited to 'cpp/core.mu')
-rw-r--r--cpp/core.mu36
1 files changed, 36 insertions, 0 deletions
diff --git a/cpp/core.mu b/cpp/core.mu
new file mode 100644
index 00000000..b1fd34d2
--- /dev/null
+++ b/cpp/core.mu
@@ -0,0 +1,36 @@
+recipe string-equal [
+  default-space:address:space <- new location:type, 30:literal
+  a:address:array:character <- next-ingredient
+  a-len:integer <- length a:address:array:character/deref
+  b:address:array:character <- next-ingredient
+  b-len:integer <- length b:address:array:character/deref
+  # compare lengths
+  {
+    length-equal?:boolean <- equal a-len:integer, b-len:integer
+    break-if length-equal?:boolean
+    reply 0:literal
+  }
+  # compare each corresponding character
+  i:integer <- copy 0:literal
+  {
+    done?:boolean <- greater-or-equal i:integer, a-len:integer
+    break-if done?:boolean
+    a2:character <- index a:address:array:character/deref, i:integer
+    b2:character <- index b:address:array:character/deref, i:integer
+    {
+      chars-match?:boolean <- equal a2:character, b2:character
+      break-if chars-match?:boolean
+      reply 0:literal
+    }
+    i:integer <- add i:integer, 1:literal
+    loop
+  }
+  reply 1:literal
+]
+
+recipe main [
+  default-space:address:space <- new location:type, 30:literal
+  x:address:array:character <- new [abc]
+  y:address:array:character <- new [abd]
+  3:boolean/raw <- string-equal x:address:array:character, y:address:array:character
+]