我正在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,那么不会返回空列表吗?最终的结果列表到底是怎么来的?