将列表的平均值除以2

时间:2014-09-27 21:10:09

标签: haskell functional-programming

halveEvens :: [Int] -> [Int] 
halveEvens xs = [if xs == even then 'div' 2 xs | x<-xs]

嘿,我试图在haskell中写下一些代码,这些代码将从列表中取出并将它们除以2。我真的很陌生,所以我遇到了一些麻烦。有没有人可以让我走上正轨?我想用列表理解来实现这个目标!

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]xInt,并且even(Integral a) => a -> Bool)。