List 我正在努力理解哈斯克尔是如何解读康卡特的
concat的代码: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 :: [[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]