本地绑定
列表推导可以引入变量的本地绑定来保存一些临时值:
[(x,y) | x <- [1..4], let y=x*x+1, even y] -- [(1,2),(3,10)]
用技巧可以达到同样的效果,
[(x,y) | x <- [1..4], y <- [x*x+1], even y] -- [(1,2),(3,10)]
像往常一样,列表推导中的 let
是递归的。但生成器绑定不是,它允许阴影 :
[x | x <- [1..4], x <- [x*x+1], even x] -- [2,10]