【发布时间】:2016-12-12 02:00:29
【问题描述】:
Haskell 如何处理列表生成器?具体来说,为什么会这样
f n = [x:xs | x <- [1..n], xs <- []]
产生空列表?每次“迭代”中的x:xs 中的xs 是什么?
【问题讨论】:
-
对于“每个‘迭代’中的
x:xs中的xs是什么?”没有答案。因为没有x:xs的“迭代”。冥想这个表达:[undefined | _ <- []] == []. -
@duplode 给出了一个很好的答案,说明它为什么不起作用。但我假设,您想创建列表列表,每个列表都包含一个元素;你可以用
f n = [x:xs | x <- [1..n], xs <- [[]] ] -
这会创建单元素列表,但你为什么要这样做呢?只需
f n = [[x] | x <- [1..n]]或f n = map pure [1..n]。
标签: haskell