gpt4 book ai didi

haskell - 如何使用 map 和过滤器实现列表理解?

转载 作者:行者123 更新时间:2023-12-04 16:57:31 25 4
gpt4 key购买 nike

两者 mapfilter可以使用列表理解来实现:

map f xs    = [f x | x <- xs]
filter p xs = [x | x <- xs, p x]

我想用下面的例子证明反过来也成立:
[expr | p <- s]

我到目前为止:
map (\p -> expr) s

但这仅在与 p 模式匹配时有效在 s 的所有元素上成功.在某种程度上,我首先要过滤 sp 上使用模式匹配.当然,我尝试研究这个问题,但我一直无法找到不使用列表理解或 LambdaCase 的解决方案。

最佳答案

But this works only when pattern matching with p succeeds on all elements of s.



确实:您描述的模式匹配行为通常无法通过 map 实现。和 filter独自的。用这样的术语表达理解仅在具有单个生成器和不会失败的模式的理解的更简单情况下才有效。相反,列表推导式 are specified in the Haskell ReportconcatMap 方面.特别是,关于生成器的条款涵盖了模式匹配失败的可能性:
--This is pseudo-Haskell; see the Report for the fine print.
[ e | p <- l, Q ] = let ok p = [ e | Q ]
ok _ = []
in concatMap ok l

匹配失败的处理对应于 fail在 list monad do-blocks 的 desugaring 中做。

关于haskell - 如何使用 map 和过滤器实现列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com