Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 正数递增负数递减1_Haskell - Fatal编程技术网

Haskell 正数递增负数递减1

Haskell 正数递增负数递减1,haskell,Haskell,声明类型并定义一个函数,该函数接受一个数字列表,并返回一个列表,其中所有正数元素递增1,负数递减1。此外,如果列表中有0,则会将其删除 例如,fun[2,-4,0,66,-1]将返回[3,-5,67,-2] 我尝试了两个filter和map语句之间的++和zipWith++ 下面是我的代码,它给出了一个编译错误 incDec (x:xs) = map (+1) $ filter (>0) (x:xs) (++) map (-1) $ filter (<

声明类型并定义一个函数,该函数接受一个数字列表,并返回一个列表,其中所有正数元素递增1,负数递减1。此外,如果列表中有0,则会将其删除

例如,fun[2,-4,0,66,-1]将返回[3,-5,67,-2]

我尝试了两个filter和map语句之间的++和zipWith++

下面是我的代码,它给出了一个编译错误

incDec (x:xs) = map (+1) $ filter (>0) (x:xs) (++)
                map (-1) $ filter (<0) (x:xs)
$将比任何其他运算符绑定得更松散,因此需要显式括号。此外,您不需要解构列表,因为您只是将其重新组合在一起。x:xs模式是不必要的,它会在空列表上中断您的函数

incDec xs = (map (+1) $ filter (>0) xs) ++
            (map (subtract 1) $ filter (<0) xs)
用法示例:

*Main> incDec [2, -4, 0, 66, -1]
[3,-5,67,-2]

请张贴错误。通过将问题分为两部分并将其组合起来,而不是一次完成所有工作,通常是一种更整洁的解决方案。incDec=map\x->x+signum x。过滤器/=0。为了让人觉得非常新奇,你可以用+signum替换lambda-通常我不喜欢for函数,但在这里它几乎是可读的:添加signum。我真的很感谢大家的帮助。这个真的让我头疼。
*Main> incDec [2, -4, 0, 66, -1]
[3,-5,67,-2]