【发布时间】:2023-03-10 11:29:01
【问题描述】:
我有两个元素作为列表的开头 [1, 2]
这个不寻常的序列是它复制了在三个元素之后的某种类型的数字中的数字。例如,在 1 和 2 之后,我们将有另一个 2,然后是两个 1。 所需列表的前几个元素将产生
[1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2] 因为
1 2 2 1 1 2 1 2 2 1 2 2
其中前面的数字表示同一数字的小序列的长度。
到目前为止,我已经尝试使用 replicate 函数根据列表中较早的元素重复相同的数字。
selfrle :: [Int]
selfrle = 1 : 2 : [x | a <- [0..], let x = replicate (selfrle !! a) (selfrle !! (a + 1))) ]
问题是我不知道为什么它不起作用。
【问题讨论】:
-
我无法对您要生成的序列的描述做出正面或反面。
-
原来它是一个无限的符号序列 {1,2},以
[1,2, ...]开头,并且是来自其自己的 RLE 编码的运行长度序列:ks == ([1,2] ++) . drop 2 . map fst . rle $ ks。
标签: algorithm haskell sequence lazy-sequences