我想獲得以下字符串「我想今晚掙脫」的一些旋轉列表。約束條件是輪換不能以「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