是否有标准高阶函数的直接组合来计算列表中的唯一元素?
例如,结果为
[1, 1, 4, 0, 4, 4]
Run Code Online (Sandbox Code Playgroud)
会是这样的
[(1,2), (4,3), (0,1)]
Run Code Online (Sandbox Code Playgroud) 我尝试编写一个程序,它将计算列表中每个元素的频率.
In: "aabbcabb"
Out: [("a",3),("b",4),("c",1)]
Run Code Online (Sandbox Code Playgroud)
您可以在以下链接中查看我的代码:http://codepad.org/nyIECIT2 在此代码中,唯一函数的输出将是这样的
In: "aabbcabb"
Out: "abc"
Run Code Online (Sandbox Code Playgroud)
使用唯一的输出我们将计算目标列表的频率.你也可以在这里看到代码:
frequencyOfElt xs=ans
where ans=countElt(unique xs) xs
unique []=[]
unique xs=(head xs):(unique (filter((/=)(head xs))xs))
countElt ref target=ans'
where ans'=zip ref lengths
lengths=map length $ zipWith($)(map[(=='a'),(==',b'),(==',c')](filter.(==))ref)(repeat target)
Error:Syntax error in input (unexpected symbol "unique")
Run Code Online (Sandbox Code Playgroud)
但在ghci 6.13中也出现了其他类型的错误
很少有人问我使用[(=='a'),(==',b'),(==',c')]的目的是什么.我的期望:如果ref ="abc"和target ="aabbaacc"那么
zipWith($) (map filter ref)(repeat target)
Run Code Online (Sandbox Code Playgroud)
将显示["aaaa","bb","cc"]然后我可以使用这里的地图长度来获得频率这里的过滤列表根据ref我使用[(=='a'),(==' ,b '),(==',C')]
我假设一些逻辑错误在于[(=='a'),(==',b'),(==',c')]这里..