From ed3cdddc3c5a03993b872baff70c5956885a6a37 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 6 Feb 2016 00:58:05 -0800 Subject: 2629 - starting work on hash tables --- 077hash.mu | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 077hash.mu diff --git a/077hash.mu b/077hash.mu new file mode 100644 index 00000000..77e564d9 --- /dev/null +++ b/077hash.mu @@ -0,0 +1,28 @@ +# From http://burtleburtle.net/bob/hash/hashfaq.html#example +# Though this one doesn't behave the same because mu uses doubles under the +# hood, which wrap around at a different limit. +recipe hash x:address:shared:array:character -> n:number [ + local-scope + load-ingredients + n <- copy 0 + len:number <- length *x + i:number <- copy 0 + { + done?:boolean <- greater-or-equal i, len + break-if done? + c:character <- index *x, i + n <- add n, c + tmp1:number <- shift-left n, 10 + n <- add n, tmp1 + tmp2:number <- shift-right n, 6 + n <- xor-bits n, tmp2 + tmp3:number <- shift-left n, 3 + n <- add n, tmp3 + tmp4:number <- shift-right n, 11 + n <- xor-bits n, tmp4 + tmp5:number <- shift-left n, 15 + n <- add n, tmp5 + i <- add i, 1 + loop + } +] -- cgit 1.4.1-2-gfad0