当前代码
嗨,我有这样的功能:
jj::[Int]->[Int]
jj xs = [x|x<-xs,x `mod` 2 ==0]
对于输入 [1..20]
,它为我提供输出:
[2,4,6,8,10,12,14,16,18,20] -> only the values divisible by 2
我需要什么
如果列表值可以被2分割,则它被解释为0
,否则被解释为1
:
输入:[243,232,243]
输出:[1,0,1]
答案 0 :(得分:5)
当然你只想要地图:
jj::[Int]->[Int]
jj xs = map (`mod` 2) xs
由于currying
map (`mod` 2) :: [Int] -> [Int]
正是我们想要的功能,所以我们可以这样做:
jj::[Int]->[Int]
jj = map (`mod` 2)
两者都屈服:
*Main> jj [2,4,5,6,8,9]
[0,0,1,0,0,1]
答案 1 :(得分:4)
如果你想要[]语法(也就是列表理解),你可以说
jj::[Int]->[Int]
jj xs = [x `mod` 2 | x<-xs]
相当于MGwynne的map
解决方案。
答案 2 :(得分:3)
查看以下功能:
map :: (a -> b) -> [a] -> [b]
fmap :: (Functor f) => (a -> b) -> f a -> f b
其中列表是类型类仿函数的实例。您需要一个类型为Int -> Int
的函数来进行转换。
jj :: (Functor f, Integral i) => f i -> f i
jj = fmap (`mod` 2)
(对于列表,map
和fmap
都做同样的事情。fmap
是map
)的推广
答案 3 :(得分:2)
递归方式:
dividablelist :: [Int] -> [Int]
dividablelist [] = []
dividablelist (x:xs) = mod x 2 : dividablelist xs