diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-02-04 23:28:50 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-02-04 23:28:50 -0800 |
commit | ee50fd157c110c9febdd7676ae3e615a7598579d (patch) | |
tree | c5ce808acf0f97af8f03793f81c65545bced6d66 /mu.arc | |
parent | 22a3a0073c0c8ebecf7607a6cbbb14729edb5c51 (diff) | |
download | mu-ee50fd157c110c9febdd7676ae3e615a7598579d.tar.gz |
706
Diffstat (limited to 'mu.arc')
-rw-r--r-- | mu.arc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/mu.arc b/mu.arc index 236024b5..a1d7c2f0 100644 --- a/mu.arc +++ b/mu.arc @@ -1891,6 +1891,36 @@ (result:boolean <- equal full:integer curr:integer) (reply result:boolean)) +(init-fn string-equal + (default-space:space-address <- new space:literal 30:literal) + (a:string-address <- next-input) + (a-len:integer <- length a:string-address/deref) + (b:string-address <- next-input) + (b-len:integer <- length b:string-address/deref) + ; compare lengths + { begin + (length-equal?:boolean <- equal a-len:integer b-len:integer) + (break-if length-equal?:boolean) + (reply nil:literal) + } + ; compare each corresponding byte + (i:integer <- copy 0:literal) + { begin + (done?:boolean <- greater-or-equal i:integer a-len:integer) + (break-if done?:boolean) + (a-char:byte <- index a:string-address/deref i:integer) + (b-char:byte <- index b:string-address/deref i:integer) + { begin + (chars-match?:boolean <- equal a-char:byte b-char:byte) + (break-if chars-match?:boolean) + (reply nil:literal) + } + (i:integer <- add i:integer 1:literal) + (loop) + } + (reply t:literal) +) + (init-fn strcat (default-space:space-address <- new space:literal 30:literal) ; result = new string[a.length + b.length] |