给出列表清单:
xss = [[1,2,3],[4,5,6],[7,8]]
我希望按列表大小然后按余数过滤它,然后返回Int。
列表以下是我的两次尝试:
concat [[x | x <- xs, mod x 2 == 0] | xs <- xss, length xs > 2]
filter (\x -> mod x 2 == 0) $ concat $ filter (\x -> length x > 2) xss
是否有更具表现力的方式来做同样的事情,但代码更少?
答案 0 :(得分:5)
Haskell中有一个内置的even
函数,您还可以使用Blunt获得帮助转换为无点样式的帮助。这给你:
filter even . concat . filter ((> 2) . length)
答案 1 :(得分:3)
单个列表理解就足够了
[x | xs@(_:_:_:_) <- xss, x <- xs, mod x 2 == 0]
模式(_:_:_:_)
匹配所有至少包含三个元素的列表。