単一の文字列から可能なすべての部分文字列をどのように抽出しますか? 私は一種の面倒な方法を思いついたので、もっと簡単な方法を見つけたいと思っています。
subStrings :: String -> [String]
subStrings xs = xs : takeEl xs
takeEl :: String -> [String]
takeEl xs = nub (concat [y : (takeEl y) | y <- takeEl'])
where
takeEl' = [del y xs | y <- [0..(length xs - 1)]]
del :: Int -> [a] -> [a]
del k xs = take k xs ++ drop (k+1) xs
例を挙げてもう少し説明したいと思います。「abc」で関数を使用する場合、順列なしで以下の要素を含むリストを作成する必要があります (「ab」が存在する場合、「ba」は必要ありません) )。
`["abc", "a","b","c","ab","ac","bc",""]`
したがって、 inits を連結します。それは私に「ac」を与えないので、尾は十分ではありません.