///|
pub fn levenshtein(a : String, b : String) -> Int {
  let a_chars = a.to_array()
  let b_chars = b.to_array()
  let a_len = a_chars.length()
  let b_len = b_chars.length()
  if a_len == 0 {
    return b_len
  }
  if b_len == 0 {
    return a_len
  }
  let cache = Array::make(b_len, 0)
  for j in 0.. Double {
  let a_len = a.to_array().length()
  let b_len = b.to_array().length()
  if a_len == 0 && b_len == 0 {
    return 1.0
  }
  let max_len = if a_len > b_len { a_len } else { b_len }
  1.0 - levenshtein(a, b).to_double() / max_len.to_double()
}