【发布时间】:2015-12-12 21:29:51
【问题描述】:
我的任务是实现一个一直返回 Thue-Morse 序列的函数。我已经通过原始递归完成了它,但现在我必须使用循环列表(使用列表理解)来完成它,并且当我调用它时它必须返回它:
>take 4 thueSeq
[[0],[0,1],[0,1,1,0],[0,1,1,0,1,0,0,1]]
这是我的(可怕的)实施尝试:
> thueSeq = 0: [x | x <- zipWith (mod) (tail thueSeq) [1] ]
我马上就知道这是错误的(头部应该是 [0],而不是 0),但是写 [0] ++ [0,1] ++ ... 并没有返回列表列表。
我的问题是,首先,我如何以[[0],[0,1]]“开始”列表,因为从我在循环列表中看到的情况来看,它们具有基本情况,然后递归。其次,我的列表理解试图将(mod x 1) 应用于每个值,但这也是错误的,因为[[0,1]] 会变成[[0,1,0]] 而不是[[0,1,1,0]]。所以我想我必须将它应用于列表中的每个其他元素(第一个元素、第三个、第五个等)?
【问题讨论】:
-
“我如何使用
[[0],[0,1]]'开始'列表”的直接答案是“使用[0] : [0,1] : ...而不是[0] ++ [0,1] ++ ...”。
标签: list haskell circular-list