1
我想创建一个无限列表如下递归列出
(1:[]):(2:2:[]):(3:3:3:[]) ...
我已经尝试了很多,我能想到的最好的是
function = (1:[]) : map (\n -> n) ( from 2)
我相信,这种需要是完成递归,但我不能看到它
任何提示或帮助将是巨大的感谢
我想创建一个无限列表如下递归列出
(1:[]):(2:2:[]):(3:3:3:[]) ...
我已经尝试了很多,我能想到的最好的是
function = (1:[]) : map (\n -> n) ( from 2)
我相信,这种需要是完成递归,但我不能看到它
任何提示或帮助将是巨大的感谢
这个怎么样:
concatMap (\x -> replicate x x) [1..]
它没有明确的递归,但做你想做的。
由于凯沙夫基尼指出,你可能想要的版本无连接:
map (\x -> replicate x x) [1..]
这里是一个递归定义的建议:
lss = [1]:map (\ls -> (1+head ls):(map (+1) ls)) lss
(即使复制的解决方案是短!)
我想你的意思只是'map(\ x - > replicate xx)[1 ..]',不是吗? – kini
是的,你是对的。 – somesoaccount
只是为了好玩,请注意'(\ x - > replicate xx)'只是'join replicate',所以你可以把它写成'map(join replicate)[1 ..]';或者更短,如'加入复制<$> [1 ..]'。 – amalloy