Arn*_*ack 4 algorithm haskell sequence lazy-sequences
我有两个元素作为列表的开头[1、2]
这种不同寻常的顺序是,它会复制跟随三个元素的某种类型的位数。例如,在1和2之后,我们将有另一个2,然后是两个1。所需列表的前几个元素将产生
[1、2、2、1、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
Run Code Online (Sandbox Code Playgroud)
其中前面的数字表示同一数字的最小序列的长度。
到目前为止,我已经尝试使用该replicate函数根据列表中前面的元素重复相同的数字。
selfrle :: [Int]
selfrle = 1 : 2 : [x | a <- [0..], let x = replicate (selfrle !! a) (selfrle !! (a + 1))) ]
Run Code Online (Sandbox Code Playgroud)
问题是我不知道为什么它不起作用。
并不奇怪,它出现在OEIS中,网址为https://oeis.org/A000002,并在此处被称为Kolakoski序列。在那里,他们甚至提供了John Tromp 2011年的Haskell程序:
a = 1:2: drop 2 (concat . zipWith replicate a . cycle $ [1, 2])
Run Code Online (Sandbox Code Playgroud)