当前位置: 首页 > 知识库问答 >
问题:

当无限列表开始重复时进行过滤

秦斌
2023-03-14

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

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

我有两个问题/顾虑:

1)如何将列表的头部与列表中稍后的元素匹配?这是解决我问题的有效方法吗?(如果需要,我将在稍后添加更多关于确切序列的细节。目前,我正在寻找一般性意见。)

共有2个答案

师承弼
2023-03-14

第一个元素可能永远不会在像1,2,3,4,5,3,4,5,3,4,...这样的序列中重复,其中(a!!i)==(a!!j)==

这被称为循环检测,最近在这里进行了讨论。

蓬宾白
2023-03-14

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

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

它的作用与您描述的完全相同:它获取某个列表的头部,并收集列表的部分,直到该头部元素再次出现在列表中。例如:

list = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, ...]
findPeriodic list => [1, 2, 3, 4, 5]
 类似资料:
  • 问题内容: 我打算初始化一个长度为n的列表列表。 但是,这以某种方式将列表链接在一起。 我希望有这样的东西: 有任何想法吗? 问题答案: 问题在于它们在内存中都是完全相同的列表。当使用语法时,得到的是n许多x对象的列表,但是它们都是对同一对象的引用。它们不是不同的实例,而是n对同一实例的引用。 要列出3个不同的列表,请执行以下操作: 这为你提供了3个单独的实例,这是你想要的 类似于 虽然类似于:

  • 这是保存列表的功能,有什么方法可以让我将列表保存在数据库中,并跳过现有的列表,这样它就会与现有的列表重复。 下面是我保存列表的SQL

  • 我知道对无限列表进行排序是不可能的,但我正试图为n个数的倍数的无限递增列表写一个定义。 我已经有这个功能了 它返回n的无限倍数列表。但现在我想构建一个函数,给定一个返回列表中所有数字的倍数的无限递增列表。所以函数

  • 我有如下列表: 列表 但是,这给了一张地图。我不需要地图,我需要名单。 我怎么能这么做?

  • 输入是一个列表列表。请看下面。文件名是一个列表,包含的名称与列表中的列表数量相同(,,) 每个名称都附加到路径中:-- 程序在遍历列表时遍历包含路径的列表,并打印路径及其文件名。我希望输出是--。然而,我得到了下面的输出。请查看输入后的输出 输入 输出 我希望输出是-- 然而,我得到的结果如下: 我无法理解为什么在遍历列表时不能使用文件名遍历路径列表。我希望这有助于澄清问题。有人能帮忙吗? 我已经

  • 我有下表(TBL_视频),在“TIMESTAMP”中有重复的列条目,我只想在“CAMERA”编号匹配时删除它们。 之前: 之后: 我已尝试此语句,但列不会相应删除。我非常感谢为生成正确的SQL语句所提供的所有帮助。提前谢谢!