繁体   English   中英

如何在Haskell中实现列表推导?

[英]How are list comprehensions implemented in Haskell?

  • 列表推导只是一种语言特征吗?
  • 使用纯Haskell伪造列表理解的最简单方法是什么?
  • 您是否必须使用do block / >>=来执行此操作,还是可以使用其他方法将列表理解混合在一起?

澄清:通过“假”列表理解我的意思是创建一个函数,它接受相同的输入并产生相同的输入,即返回值的表单,压缩在一起的列表,以及谓词或多个谓词。

Haskell报告中的第3.11节准确描述了列表推导的含义,以及如何将它们转换出来。

如果你想单子推导你基本上需要更换[e]return e[]mzero ,并concatMap通过(>>=)的翻译。

为了增加augustss的答案,如果你有类似的东西:

[(x, y) | x <- [1..3], y <- [1..3], x + y == 4]

......它相当于该使用do记号:

do x <- [1..3]
   y <- [1..3]
   guard (x + y == 4)
   return (x, y)

...这相当于concatMap这种用法:

concatMap (\x ->
    concatMap (\y ->
        if (x + y == 4) then [(x, y)] else []
        ) [1..3]
    ) [1..3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM