Haskell 你怎么能不否定列表上的数字呢?

Haskell 你怎么能不否定列表上的数字呢?,haskell,Haskell,我知道在Haskell中,我们可以通过否定来否定一个数字。但是,如果我想否定列表中除了某个数字以外的所有内容,该怎么办 假设我有一个名为helpnegate的函数,它接受一个列表。假设列表是[1,0,2,4,8],除了数字4之外,如何对列表中的每个数字求反?所以如果我真的要否定[1,0,2,4,8],我应该得到[-1,0,-2,4,-8] 这是我的尝试: helpnegate a | a == 4 = (0:helpnegate tail) | otherwise

我知道在Haskell中,我们可以通过否定来否定一个数字。但是,如果我想否定列表中除了某个数字以外的所有内容,该怎么办

假设我有一个名为helpnegate的函数,它接受一个列表。假设列表是[1,0,2,4,8],除了数字4之外,如何对列表中的每个数字求反?所以如果我真的要否定[1,0,2,4,8],我应该得到[-1,0,-2,4,-8]

这是我的尝试:

helpnegate a
        | a == 4 = (0:helpnegate tail)
        | otherwise = (negate a: helpnegate tail)

在这里,我试图做的是,如果a是4,那么我调用该函数并移动到下一个,如果它不是4,我否定该数字并调用帮助方法到下一个数字。这不起作用。

这是一个映射,因此您可以使用:


你能写出一个函数来否定一个数字,除非它是4吗?@DanielWagner我在上面输入了我的概念,它不起作用到底意味着什么?这是否意味着您在期望值为4的地方得到了值0?只需返回a本身或4。这是否回答了您的问题?哦,我明白了,我不知道你可以用-x来代替4号。谢谢你@丹兹:嗯,它使用模式匹配。因此,它将首先与4匹配。如果失败,它将回退到fx=-x子句。
helpnegate :: (Num a, Eq a) => [a] -> [a]
helpnegate = map f
    where f 4 = 4
          f x = -x
Prelude> helpnegate [1,0,2,4,8]
[-1,0,-2,4,-8]