haskell - 在 Haskell 中编写一个函数来获取大小为 n 的所有子序列?

标签 haskell functional-programming

我试图编写一个函数来获取大小为 n 的列表的所有子序列,但我不知道如何去做。

我想我可能可以使用内置的 Data.List.subsequences 并过滤掉大小不是 n 的列表,但这似乎是一种相当迂回且低效的方法,而且我'如果可以避免的话我宁愿不这样做,所以我想知道你有什么想法吗?

我希望它是这样的类型

subseqofsize :: Int -> [a] -> [[a]]

为了进一步说明,这是我正在寻找的示例:

subseqofsize 2 [1,2,3,3]
[[1,2],[1,3],[2,3],[1,3],[2,3],[3,3]]

此外,我不关心任何事情的顺序。

最佳答案

我假设这是家庭作业,或者您这样做是为了学习练习,所以我会给您一个解决方案的概述,而不是用勺子给您灌输正确的答案。

无论如何,这是一个递归问题。

两种基本情况:

sublistofsize 0 _        = ...
sublistofsize _ []       = ...

然后有两个递归步骤:

sublistofsize n (x : xs) = sublistsThatStartWithX ++ sublistsThatDon'tStartWithX
  where sublistsThatStartWithX = ...
        sublistsThatDon'tStartWithX = ...

请记住,基本情况的定义需要与递归情况中的定义适当配合。仔细思考:不要仅仅假设基本情况都会导致空列表。

这有帮助吗?

关于haskell - 在 Haskell 中编写一个函数来获取大小为 n 的所有子序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919954/

相关文章:

list - 是否有一个函数接受一个列表并返回该列表中重复元素的列表?

haskell - 使用 Functor 或其他类型类可以免费获得哪些功能?

Haskell concat Int

javascript - 数组的高效映射

haskell - 垃圾收集器如何找出堆栈中的对象引用?

haskell - 我可以问一个 Either 它是左(还是右)?

javascript - 有没有办法在 Javascript 中进行可变递归柯里化(Currying)?

Salesforce Apex 中的 Lambda

带有函数链接表达式的 Java8 可选

scala - 在 Scala 中从结构上识别类型