1
A
回答
5
不太像那样,我推测你试图得到一个布尔值来表示值是否大于0且小于100?您有几种选择:
可以命名一个功能
condition :: Int -> Bool
condition x = x > 0 && x < 100
map condition [1..10]
您可以使用lambda
map (\x -> x > 0 && x < 100) [1..10]
您可以使用Data.Ix
和inRange
功能
import Data.Ix
-- inRange is inclusive.
map (inRange (1,99)) [1..10]
5
map
是用于在列表上映射函数。如果你想只映射在满足条件的列表的元素的功能,那么你或许应该使用filter
:
map (+2) $ filter (>0) [-10..120]
,或者如果你有更多的条件都必须持有
map (+2) $ filter (>0) $ filter (<100) [-10..120]
或等效
map (+2) $ filter (\x -> x>0 && x<100) [-10..120]
7
表达多个过滤器条件的好方法是理解,例如
[k | k <- [1..10], k > 2, k < 7]
可以避免λ表达式作为使用公Applicative
,其允许“喂”一个参数到几个功能:
import Control.Applicative
filter ((&&) <$> (>2) <*> (<7)) [1..10]
这可以在以下略低隐蔽延长多个测试方式:
import Control.Applicative
filter (and . ([ (>2) , (<7) , odd ] <*>) . pure) [1..10]
当然,过滤后,你可以以任何你喜欢的方式映射列表。
[编辑]
如果你想炫耀,你可以使用鼠标,以及:
import Control.Arrow
filter ((>2) &&& (<7) >>> uncurry (&&)) [1..10]
什么,你会期望在该表格的价值? – 2011-06-08 09:16:00