使用列表推导在Haskell中生成列表列表的函数

wad*_*rca 2 haskell list-comprehension list

我想编写一个使用列表推导来生成列表列表的函数,其工作方式如下:

makeList 3 == [[1],[1,2],[1,2,3]]
makeList 5 == [[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]
makeList (-2) == []
Run Code Online (Sandbox Code Playgroud)

我最终得到了这个解决方案,但它显然没有从问题中找到它所需要的东西:

let makelist x = [x | x <- x, y <- [1..x]]
Run Code Online (Sandbox Code Playgroud)

所以如果我输入这个

Prelude> makelist [3]
Run Code Online (Sandbox Code Playgroud)

输出将显示如下:

[3,3,3]
Run Code Online (Sandbox Code Playgroud)

我希望先成为列表中的列表,然后我希望它能够增加.谢谢你的帮助!

Cac*_*tus 7

让我们先尝试生成一个内部列表,但有一些限制m:

> let inner m = [1..m]
> inner 5
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

现在,观察你的外部列表,在某些限制n,是[inner 1, inner 2, inner 3, ..., inner n],或者,以列表理解形式:

> let outer n = [inner m | m <- [1..n]]
> outer 3
[[1], [1,2], [1,2,3]]
Run Code Online (Sandbox Code Playgroud)

所以我们可以将两者合并为单个列表理解表达式:

> let makeList n = [[1..m] | m <- [1..n]]
> makeList 4
[[1],[1,2],[1,2,3],[1,2,3,4]]
Run Code Online (Sandbox Code Playgroud)