List 我正在努力理解哈斯克尔是如何解读康卡特的

List 我正在努力理解哈斯克尔是如何解读康卡特的,list,haskell,concatenation,list-comprehension,List,Haskell,Concatenation,List Comprehension,concat的代码: concat :: [[a]] -> [a] concat xss = [x | xs <- xss, x <- xs] [1,2,3,4,5]是如何实现的?在列表理解中,位a在列表理解中,位a如果我们必须与命令式编程进行比较,我们可以想到 [ expr | x1 <- list1 , x2 <- list2 , ....] 在你的情况下,我们有 result = [] for xs in xss: for x in xs: r

concat的代码:

concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]

[1,2,3,4,5]是如何实现的?

在列表理解中,位a在列表理解中,位a如果我们必须与命令式编程进行比较,我们可以想到

[ expr | x1 <- list1 , x2 <- list2 , ....]
在你的情况下,我们有

result = []
for xs in xss:
  for x in xs:
    result.append(x)
所以,当xss=[[1,2,3],[4],[5]]时,我们有:

xs=[1,2,3] x=1将附加到结果中 将x=2追加到结果中 x=3追加到结果中 xs=[4] x=4将附加到结果中 xs=[5] 将x=5追加到结果中 因此,最终结果为[1,2,3,4,5]


这个比较并不是一个完全可靠的描述,因为它没有考虑惰性,Haskell也没有像上面那样通过向可变列表添加数据来计算最终列表。也许Python的产量和生成器会更接近。不过,上面的比较应该说明基本机制。

如果我们必须与命令式编程进行比较,我们可以想到

[ expr | x1 <- list1 , x2 <- list2 , ....]
在你的情况下,我们有

result = []
for xs in xss:
  for x in xs:
    result.append(x)
所以,当xss=[[1,2,3],[4],[5]]时,我们有:

xs=[1,2,3] x=1将附加到结果中 将x=2追加到结果中 x=3追加到结果中 xs=[4] x=4将附加到结果中 xs=[5] 将x=5追加到结果中 因此,最终结果为[1,2,3,4,5]


这个比较并不是一个完全可靠的描述,因为它没有考虑惰性,Haskell也没有像上面那样通过向可变列表添加数据来计算最终列表。也许Python的产量和生成器会更接近。不过,上面的比较应该说明基本机制。

很好地说明了明显的一致性

[ E | P <- (xs ++ ys), Q ]  ===  [ E | P <- xs, Q ] ++ [ E | P <- ys, Q ]

[ x | xs <- [E], x <- xs ]  ===  [ x | x <- E ]

[ x | x <- [E] ]  ===  [E]
根据上面的内容和++的属性,其中

另见:

. 技术专著PRG-56,R.S.Bird 1986。
那么有了明显的身份,

[ E | P <- (xs ++ ys), Q ]  ===  [ E | P <- xs, Q ] ++ [ E | P <- ys, Q ]

[ x | xs <- [E], x <- xs ]  ===  [ x | x <- E ]

[ x | x <- [E] ]  ===  [E]
根据上面的内容和++的属性,其中

另见:

. 技术专著PRG-56,R.S.Bird 1986。
您是否理解列表中的理解?如果是的话,也许我们可以和他们打个比方,这会对你有所帮助;如果答案是否定的,那么下一步可能正确的做法是查阅众多优秀的Haskell教程中的一个,然后跳转到列表理解部分。或者,根据您的理解方式,您可能会发现有帮助。我也有一个答案,给出了一个关于脱胶规则的工作示例。嗨,丹尼尔。今天我刚刚开始讨论列表理解,但是是的,我已经理解了我所讨论的所有其他内容,比如因子和素数——只是concat让人困惑。一旦有机会,我会尽快阅读这两个链接,谢谢。有什么你能理解的理解吗?如果是的话,也许我们可以和他们打个比方,这会对你有所帮助;如果答案是否定的,那么下一步可能正确的做法是查阅众多优秀的Haskell教程中的一个,然后跳转到列表理解部分。或者,根据您的理解方式,您可能会发现有帮助。我也有一个答案,给出了一个关于脱胶规则的工作示例。嗨,丹尼尔。今天我刚刚开始讨论列表理解,但是是的,我已经理解了我所讨论的所有其他内容,比如因子和素数——只是concat让人困惑。一旦有机会,我会尽快阅读这两个链接,谢谢。啊,这很有意义。我没有看到的是xs xs啊,这是有道理的。我没有看到的是xs
[ x | x <- Q ]  ===  Q
[A,B,C,...,Z]  ===  [A] ++ [B] ++ [C] ++ ... ++ [Z]