[英]Double List Comprehension in Haskell
我正在尝试将数组实现为Haskell中的列表列表。 特别是,我有一些我给出的数组m
,以及一个我想要满足的谓词p
,我想创建一个索引列表(x,y)
,使得第y
个列表中的第x
个元素满足p
。 我把它设置为以下列表理解:
[(x,y) | x<-[1..],y<-[1..],p ((m !! y) !! x)]
当它试图在第一行中找到不存在的m
元素时会引发错误。 我可以看到一个立即解决这个问题的方法就是将x
和y
的内部理解改为y<-[1..length m]
但我觉得有一种可行的方法可以利用懒惰。 我只是不知道它是什么。
的确有。 获取列表元素及其索引的常用习惯是使用zip
:
[(x,y) | (x,mx) <- zip [1..] m, (y,mxy) <- zip [1..] mx, p mxy]
也:
!!
是非常低效的,特别是从列表中提取许多元素时,所以最好尽可能避免使用它。 0
开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.