F#:如何计算海明距离?
答
您可以使用Seq.map2
比较对应的值再总结的区别:
let hamming s1 s2 = Seq.map2((=)) s1 s2 |> Seq.sumBy(fun b -> if b then 0 else 1)
答
也许认为这http://davefancher.com/tag/hamming-distance/?还是有什么特别的理由,它不符合你的要求?从链接页面:
let hammingDistance (source : string) (target : string) =
if source.Length <> target.Length then failwith "Strings must be equal length"
Array.zip (source.ToCharArray()) (target.ToCharArray())
|> Array.fold (fun acc (x, y) -> acc + (if x = y then 0 else 1)) 0
hammingDistance "abcde" "abcde" |> printfn "%i" // 0
hammingDistance "abcde" "abcdz" |> printfn "%i" // 1
hammingDistance "abcde" "abcyz" |> printfn "%i" // 2
hammingDistance "abcde" "abxyz" |> printfn "%i" // 3
hammingDistance "abcde" "awxyz" |> printfn "%i" // 4
hammingDistance "abcde" "vwxyz" |> printfn "%i" // 5
这是一个非常好的解决方案! – oopbase 2015-03-13 13:01:27