'[e | x <- xs; y <- ys; ..] = concat[[e | y <- ys; ..] | x <



我正在阅读"函数式编程导论第一版"。我制定了一个规则,将理解翻译为,

[e | x <- xs; y <- ys; ...] = concat[[e | y <- ys; ...] | x <- xs]

我不明白这里的连接。 concat需要多个列表,但在这里我只看到一个。

我读[[e | y <- ys; ...] | x <- xs]

for(x in xs){
 for(y in ys){
  someList.push(e)
 }
}

也许我读错了,或者|在这里有一些特殊的含义。

请帮忙。

翻译成

伪语言[[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]表达式理解为:"对于xs中的每个x,生成一个列表,其中包含ys中每个ye"。

concat具有以下签名:concat :: [[a]] -> [a]

所以它展开了折叠的结构。

因此concat [[1,2,3],[4,5]]=> [1,2,3,4,5]

最新更新