halveEvens :: [Int] -> [Int]
halveEvens xs = [if xs == even then 'div' 2 xs | x<-xs]
嘿,我试图在haskell中写下一些代码,这些代码将从列表中取出并将它们除以2。我真的很陌生,所以我遇到了一些麻烦。有没有人可以让我走上正轨?我想用列表理解来实现这个目标!
答案 0 :(得分:3)
在您的函数中,xs
是一个列表even
is a function,用于检查Integral
是否为偶数。
要使用类似运算符的函数,请将其括在后引号中,如下所示:x `div` 2
。
halveEvens :: [Int] -> [Int]
halveEvens = map halveOneEven
halveOneEven :: Int -> Int
halveOneEven x = if (even x) then (x `div` 2) else x
答案 1 :(得分:0)
在逗号后使用列表理解和后卫:
halveEvens xs = [x `div` 2 | x<-xs, even x]
您可以将其作为数学定义阅读:从x
获取偶数的所有xs
值,并收集将它们分成列表的结果。在ghci
中,您可以使用:t
检查类型并使其匹配(xs
类型为[Int]
,x
为Int
,并且even
是(Integral a) => a -> Bool
)。