【发布时间】:2019-08-05 00:24:28
【问题描述】:
我正在从“Learn You a Haskell for Great Good!”一书中了解guard 函数。米兰利波卡。
以下示例:
ghci> [1..50] >>= (\x -> guard('7' `elem` show x) >> return x)
[7, 17, 27, 37, 47]
我知道guard 采用布尔值,如果该值为True,则guard 采用() 并将其置于最小默认上下文中并成功。
如果值为False,则guard 生成一个失败的一元值。
但是,我不明白在上面的示例中,guard 如何创建结果列表[7, 17, 27, 37, 47]。在 lambda 函数中作为 x 传递的内容是 1 吗?此外,如果('7' `elem` show x) 的计算结果为False,那么不会返回空列表吗?最终的结果列表到底是怎么来的?
【问题讨论】:
标签: list haskell list-comprehension monads guard-statement