let fmemo f =
  let m = Array.create 8 None in
  fun z ->
    let k = fdx z in
    match m.(k) with
      | Some r -> r
      | None ->
          let r = f z in m.(k) <- Some r ; r