我是F#的新手。这是我的第一个函数式编程语言。
我想写一个算法来计算两个相等长度的弦之间的汉明距离。如何在F#中这样做?任何由伪代码组成的例子都将非常感激。
答案 0 :(得分:7)
您可以使用Seq.map2
比较相应的值,然后对差异求和:
let hamming s1 s2 = Seq.map2((=)) s1 s2 |> Seq.sumBy(fun b -> if b then 0 else 1)
答案 1 :(得分:3)
也许考虑一下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