我试图将列表中偶数的一半
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x -> xs, even x]
错误是 错误:输入' - >'
时解析错误这是什么意思以及如何修复它? 谢谢
答案 0 :(得分:2)
如果你想在列表中保留奇数:
halfEvens :: [Int] -> [Int]
halfEvens = map (\x -> if (x `mod` 2) == 0 then x `div` 2 else x)
答案 1 :(得分:1)
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x <- xs, even x]
x <- xs
的读数为x
来自 xs
。
答案 2 :(得分:0)
它与你的 - &gt; 的应用有关,基本上 - &gt;是一个中缀类型的运算符,也称为函数箭头(函数构建器),其目的是在左侧向右应用参数,
from -> to
但列表理解适用于&lt; - ,它会执行IO操作并将其绑定到左侧参数to <- from
,这是对您的函数的一个小修复:
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x <- xs, even x]
[编辑:忽略此处的任何其他内容] 的 =============================================== ========================== 强>
但是,如果你正在尝试将所有偶数除以2那么你做错了,因为这个函数只返回偶数,而丢弃所有其他数。
halfEvens :: [Int] -> [Int]
halfEvens [] = []
halfEvens (x:xs) = if even x then x `div` 2 : halfEvens else x : halfEvens
这是正确的方法,@ AlexJ136答案也很直接,这似乎比我的更有效,所以我会去做。