one*_*ser 0 haskell replace list
我必须用该元素的出现次数替换列表中的所有元素,就像我有“泰勒斯威夫特”一样,结果将是 [1,1,1,1,1,1,1,1,1,1 ,1,1]。
我已经编写了计算出现次数的代码,我只知道如何用我已经尝试过的出现次数替换所有元素:
ocurr :: [Char] -> Char -> Int
ocurr xs x = length(filter (x==) xs)
frequencias :: [Char] -> [Char]
frequencias "" = []
frequencias xs = [ ocurr xs y| y <- xs]
Run Code Online (Sandbox Code Playgroud)
和
ocurr :: [Char] -> Char -> Int
ocurr xs x = length(filter (x==) xs)
frequencias :: [Char] -> [Char]
frequencias "" = []
frequencias xs = [x | y <- xs x = ocurr xs x]
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用……有人可以帮我吗?
这将不起作用,因为您在frequencias中指定的返回类型是[Char],而频率根据您的occurr函数是Ints。空列表的特殊子句不是必需的(虽然没有错)。因此,您可以使用:
frequencias :: [Char] -> [Int]
frequencias xs = [ ocurr xs y | y <- xs ]Run Code Online (Sandbox Code Playgroud)
你也可以使用一个简单的map :: (a -> b) -> [a] -> [b]:
frequencias :: [Char] -> [Int]
frequencias xs = map (ocurr xs) xsRun Code Online (Sandbox Code Playgroud)
因此,这给了我们:
Prelude> frequencias "Taylor Swift"
[1,1,1,1,1,1,1,1,1,1,1,1]
Prelude> frequencias "taylor swift"
[2,1,1,1,1,1,1,1,1,1,1,2]
Run Code Online (Sandbox Code Playgroud)