在haskell中旋转字符串,但有一些例外
我想在haskell中旋转一个字符串,所以如果我给“现在我想尖叫”旋转[[现在我想尖叫],[现在我想尖叫]],如果字符串以“I”或“to”开头,那么必须消除它。到现在为止,我仍然有旋转的问题在haskell中旋转字符串,但有一些例外,haskell,Haskell,我想在haskell中旋转一个字符串,所以如果我给“现在我想尖叫”旋转[[现在我想尖叫],[现在我想尖叫]],如果字符串以“I”或“to”开头,那么必须消除它。到现在为止,我仍然有旋转的问题 reverseWords :: String -> String reverseWords = unwords . reverse . words shiftt :: [a] -> Int -> [a] shiftt l n = drop n l ++ take n l rot::S
reverseWords :: String -> String
reverseWords = unwords . reverse . words
shiftt :: [a] -> Int -> [a]
shiftt l n = drop n l ++ take n l
rot::String->[String]
rot l = [ reverseWords l i | i <- [0 .. (length l) -1]]
reverseWords::String->String
reverseWords=unwords。相反。话
希夫特::[a]->Int->[a]
shiftt l n=下降n l++下降n l
rot::String->[String]
rot l=[reverseWords l i | i创建所有旋转的列表,然后根据谓词进行筛选。例如
rotations x = take (length x) $ iterate rot1 x
where rot1 = drop 1 x ++ take 1 x
filteredRots = map unwords . filter (\x -> length (head x) > 2) . rotations . words
并用作
> filteredRots "Now I want to scream"
["Now I want to scream","want to scream Now I","scream Now I want to"]
前奏曲>考虑最简单的移位,只需将头部放在尾部之后。这可以通过模式匹配非常容易地实现。然后看看迭代
函数,它将重复将函数应用于输入,因此迭代(+1)0
返回[0,1,2,3,4,…]
。你如何利用它呢?在rot
中,你给了reverseWords
两个参数,但只需要一个。另外,我不知道旋转与反转有什么关系。我想你应该将字符串分解成一个单词列表,然后在该列表上调用shiftt
。