Haskell:使用列表理解并将每个列表的x减少1,从而生成x个列表

Haskell:使用列表理解并将每个列表的x减少1,从而生成x个列表,haskell,functional-programming,list-comprehension,Haskell,Functional Programming,List Comprehension,我刚开始使用Haskell,我花了几个小时试图构建一个简单的函数,在这里输入一个函数会变成这样: makeList 5 == [[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]] makeList 2 == [[1],[1,2]] 再多的研究也不能真正帮助我找出应该如何迭代我的函数“x”,以便根据我选择的数字生成多个列表,我很接近,但这正是我遇到的难题,我当前的代码基本上是在我进入makeList 3时可以这样做的地方设置的: makeList 3 = [ [ x

我刚开始使用Haskell,我花了几个小时试图构建一个简单的函数,在这里输入一个函数会变成这样:

makeList 5 == [[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
makeList 2 == [[1],[1,2]]
再多的研究也不能真正帮助我找出应该如何迭代我的函数“x”,以便根据我选择的数字生成多个列表,我很接近,但这正是我遇到的难题,我当前的代码基本上是在我进入makeList 3时可以这样做的地方设置的:

makeList 3 = [ [ x | x <- xs ] | xs <- [[1..x-2],[1..x-1],[1..x]] ]
Prelude>makeList n=[[1..x]| x makeList 5
[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]

或者您可以使用显式递归

makeList :: Int -> [[Int]]
makeList cap = go 1 where
  go num | num < cap = [1..num]:go (num+1)
         | otherwise = [1..num]:[]
makeList::Int->[[Int]]
makeList cap=go 1,其中
go num | num
试着在左侧放置一个
[1..y]
makeList=tail.inits.enumFromTo 1
[x |谢谢!这是一种非常有趣的迭代方式,但这正是我想要弄明白的!@Jace:注意它几乎说明了它的意思:给定
n
您想要一个结果列表(
[…]
)从1到
n的每个
x
[…| x
Prelude> makeList n = [ [1..x] | x <- [1..n] ]
Prelude> makeList 5
[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
makeList :: Int -> [[Int]]
makeList cap = go 1 where
  go num | num < cap = [1..num]:go (num+1)
         | otherwise = [1..num]:[]