如何在haskell中将字符串拆分为子字符串[duplicate]

edqdpe6u  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(213)

此问题在此处已有答案

How to group similar items in a list using Haskell?(5个答案)
5小时前关门了。
请帮我解决这个问题,我已经坐在它很长一段时间。到目前为止,只有这一点发生在我身上,但我不知道如何进一步分组。
实现一个函数nSubstrings::String -〉Int -〉[String]返回一个字符串的n个子字符串的列表。
类似于:

nSubstrings "HASKELLISFUN" 0 = []
    nSubstrings "HASKELLISFUN" 1 = ["HASKELLISFUN"]
    nSubstrings "HASKELLISFUN" 5 = ["HLU","ALN","SI","KS","EF"]

我试着将它们分组,然后按键排序。例如,nSubstrings“HASKELLISFUN”3
[(“H”,1),(“A”,2),('S',3),(“K”,1),('E ',2),('L ',3),('L ',1),(“I”,2),('S',3),(“F”,1),(“U”,2),('N',3)]我愿意这样看[(“H”,1),(“K”,1),(“L”,1),(“F”,1),(“A”,2),(“E”,2),(“I”,2),(“U”,2),(“S”,3),(“L”,3),(“S”,3),(“N”,3)]为了做到这一点,我写了这段代码

nSubstrings xs n 
                | n==0 = []
                | otherwise =   splitOnPairs xs --groupBy (\(x,y) -  > y == y) $ splitOnPairs xs
                    where splitOnPairs xs = [x | let y = [1..n], x<- zip xs $ cycle y ]

也许有人会给予建议或解决办法。2我将非常感激。

blpfk2vs

blpfk2vs1#

你可以用一个**sortOn :: Ord b => (a -> b) -> [a] -> [a]来做这个,首先对第二个项目进行排序,然后用groupBy :: (a -> a -> Bool) -> [a] -> [[a]]**产生与同一组的项目的“突发”,这里我们使用的是二元组中的第二个项目。最后,我们需要对所有项目执行Map,以获得Char,而不是元组(Char, Int)

import Data.List(groupBy, sortOn)

nSubstrings :: [a] -> Int -> [[a]]
nSubstrings xs n
  | n==0 = []
  | otherwise = map (map …) (groupBy (\(_, x) (_, y) -> …) (sortOn … splitOnPairs))
  where splitOnPairs xs = zip xs (cycle [1 .. n])

在这里您仍然需要填写部分。

相关问题