我正在guard
从“Learn You a Haskell for Great Good!”一书中了解该功能。米兰利波卡。
对于以下示例:
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]
。x
在 lambda 函数中传递了什么,是 1 吗?此外,如果('7' `elem` show x)
计算结果为False
,那么不会返回空列表吗?最终的结果列表到底是怎么来的?