我想获得以下字符串“我想今晚挣脱”的一些旋转列表。约束条件是轮换不能以“to”或“tonight”开头。所以旋转列表是["I want to break free today", "want to break free tonight I", "break free tonight I want to", "free tonight I want to break"]
。Haskell中的列表旋转
我写以下功能:
rotate :: [l] -> [l]
rotate [] = []
rotate (x:xs) = (x:xs) ++ head(x:xs)
rotate1 :: [a] -> [[a]]
rotate1 xs = take (length xs) (iterate rotate xs)
main = do
print $ rotate1(words("I want to break free tonight"))
运行该代码,我所获得的所有可能的旋转,但他们形成具有像["want", "I", "to", "break", "free", "tonight"]
,其是从字符串"want I to break free tonight"
不同元素列表的列表。另外,我想看看如何放弃以"to"
,"tonight"
这个词开头的旋转。我试图为第二部分使用过滤器功能,但我没有设法解决问题。任何帮助/提示表示赞赏。我注意到我是Haskell的初学者。
或者你可以使用'unwords'这是在前奏。 –
感谢您的建议。我知道函数过滤和插入或unwords,但我的问题是,我必须将它们应用到列表的列表。由于在Haskell中没有类似的指令,我不知道如何通过列表并将函数应用到每个元素。举例来说,我不能用unwords([ “I”, “希望”, “来”, “破发”, “自由”, “今夜”],[ “希望”, “我”, “来”,“休息“,”自由“,”今晚“]])获得名单[”我想今晚休息“,”希望我今晚休息“]。 – Bob