我正在阅读"功能编程简介第一版"。 我找到了将理解翻译为的规则,
[e | x <- xs; y <- ys; ...] = concat[[e | y <- ys; ...] | x <- xs]
我不明白concat在这里。 concat
需要多个列表,但在这里我只看到一个。
我将[[e | y <- ys; ...] | x <- xs]
视为
for(x in xs){
for(y in ys){
someList.push(e)
}
}
也许我读错了或|
在这里有一些特殊含义。
请帮忙。
答案 0 :(得分:2)
[[e | y <- ys; ...] | x <- xs]
将是:
for (x in xs) {
tmp = []
for (y in ys) {
tmp.push(e)
}
someList.push(tmp)
}
您可以将[[e | y <- ys; ...] | x <- xs]
表达式视为:&#34;对于x
中的每个xs
,每e
生成一个包含y
的列表} ys
&#34;。
concat
具有以下签名:concat :: [[a]] -> [a]
所以它展开了折叠的结构。
因此concat [[1,2,3],[4,5]]
=&gt; [1,2,3,4,5]