列表理解是如何在Haskell中实现的? 列表理解仅仅是一种语言特征吗 使用纯Haskell伪造列表理解的最简单方法是什么 您必须使用Do块/>=来执行此操作,还是可以使用其他块 把一个列表拼凑在一起的方法
澄清:所谓“伪造”列表理解,我的意思是创建一个函数,该函数接受相同的输入并生成相同的输入,即返回值的形式、要一起处理的列表以及一个谓词或多个谓词。在Haskell报告中准确描述了列表理解的含义,以及如何将其翻译掉列表理解是如何在Haskell中实现的? 列表理解仅仅是一种语言特征吗 使用纯Haskell伪造列表理解的最简单方法是什么 您必须使用Do块/>=来执行此操作,还是可以使用其他块 把一个列表拼凑在一起的方法,haskell,monads,ghc,Haskell,Monads,Ghc,澄清:所谓“伪造”列表理解,我的意思是创建一个函数,该函数接受相同的输入并生成相同的输入,即返回值的形式、要一起处理的列表以及一个谓词或多个谓词。在Haskell报告中准确描述了列表理解的含义,以及如何将其翻译掉 如果你想理解单子,你基本上需要在翻译中用[e]替换[e],用mzero替换[],用concatMap替换(>=)。为了增加augustss的答案,如果你有以下情况: [(x, y) | x <- [1..3], y <- [1..3], x + y == 4] 。。。这相
如果你想理解单子,你基本上需要在翻译中用
[e]
替换[e]
,用mzero
替换[]
,用concatMap
替换(>=)
。为了增加augustss
的答案,如果你有以下情况:
[(x, y) | x <- [1..3], y <- [1..3], x + y == 4]
。。。这相当于使用concatMap
:
concatMap (\x ->
concatMap (\y ->
if (x + y == 4) then [(x, y)] else []
) [1..3]
) [1..3]
我可以回答你的一些问题。它解释了理解如何是do符号的语法糖,而do符号本身只是
>=
的语法糖,但我真的不知道“使用纯Haskell伪造列表理解”是什么意思。根据Haskell规范,这是纯粹的Haskell。我添加了一个澄清,但我真的不明白为什么会有这么多的反对票,我只是想问,如果不使用列表理解来更好地理解它们,如何编写列表理解。我认为这是一个合理的问题。我投了更高的票。
concatMap (\x ->
concatMap (\y ->
if (x + y == 4) then [(x, y)] else []
) [1..3]
) [1..3]