我正在尝试学习如何列出理解,并且我正在尝试找出一种方法来找到列表的所有子序列,但我不太确定人们会如何去做。有人可以帮助我吗?

最佳答案

如果要访问此功能,可以使用 subsequences 中的 Data.List 函数。

subsequences [1,2,3]
>>> [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

如果你想知道它是如何实现的,你可以检查函数的 source code ,它在 Hackage 上可用。

在这种情况下,它是:
subsequences            :: [a] -> [[a]]
subsequences xs         =  [] : nonEmptySubsequences xs

nonEmptySubsequences         :: [a] -> [[a]]
nonEmptySubsequences []      =  []
nonEmptySubsequences (x:xs)  =  [x] : foldr f [] (nonEmptySubsequences xs)
  where f ys r = ys : (x : ys) : r

关于haskell - 你如何找到一个列表的所有子序列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5373927/

10-14 04:14