无限列表开始重复时过滤

Cod*_*ice 4 haskell sequences list

[Integer]在Haskell中创建一个序列.序列的数学定义是这样的,它重复一些正整数.在这种情况下,我想终止序列并确定有限列表的长度.

我尝试解决方案是首先从数学序列创建一个无限列表.然后我想过滤所有元素的列表,直到第一个元素重复.结果不应包括列表的重复头部.

我有两个问题/疑虑:

1)如何将列表的头部与列表中的元素匹配?2)这是解决我问题的有效方法吗?(如果需要,我稍后会添加更多关于确切序列的详细信息.现在我正在寻找一般性评论.)

dfl*_*str 10

您描述的算法可以简单地实现如下:

findPeriodic :: Eq a => [a] -> [a]
findPeriodic [] = error "there are no periodic sequences in the empty list"
findPeriodic (x : xs) = x : takeWhile (/= x) xs
Run Code Online (Sandbox Code Playgroud)

它完全符合您的描述:它占据了一些列表的头部,并收集列表的一部分,直到该元素再次出现在列表中.所以,例如:

list = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, ...]
findPeriodic list => [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)