簡體   English   中英

Haskell中的雙列表理解

[英]Double List Comprehension in Haskell

我正在嘗試將數組實現為Haskell中的列表列表。 特別是,我有一些我給出的數組m ,以及一個我想要滿足的謂詞p ,我想創建一個索引列表(x,y) ,使得第y個列表中的第x個元素滿足p 我把它設置為以下列表理解:

[(x,y) | x<-[1..],y<-[1..],p ((m !! y) !! x)]  

當它試圖在第一行中找到不存在的m元素時會引發錯誤。 我可以看到一個立即解決這個問題的方法就是將xy的內部理解改為y<-[1..length m]但我覺得有一種可行的方法可以利用懶惰。 我只是不知道它是什么。

的確有。 獲取列表元素及其索引的常用習慣是使用zip

[(x,y) | (x,mx) <- zip [1..] m, (y,mxy) <- zip [1..] mx, p mxy]

也:

  • !! 是非常低效的,特別是從列表中提取許多元素時,所以最好盡可能避免使用它。
  • 列表索引通常在Haskell中以0開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM