Haskell 计算给定整数列表中连续元素之间的差

Haskell 计算给定整数列表中连续元素之间的差,haskell,Haskell,我正在使用zipWith。我得到了正确的结果,但符号不正确。我怎么修理它?我哪里做错了 diff :: [Int] -> [Int] diff [] = [] diff x = zipWith (-) (tail x) x 结果: diff [4,2,7,3,6,5] [-2,5,-4,3,-1] 我想: [2,-5,4,-3,1] 现在,您正在计算[2-4,7-2,3-7,6-3,5-6]。如果您将参数的顺序切换为带(-)x(尾部x),那么您将把它更正为[4-2,2-7,7-3,

我正在使用
zipWith
。我得到了正确的结果,但符号不正确。我怎么修理它?我哪里做错了

diff :: [Int] -> [Int]
diff [] = []
diff x = zipWith (-) (tail x) x
结果:

diff  [4,2,7,3,6,5]
[-2,5,-4,3,-1]
我想:

[2,-5,4,-3,1]

现在,您正在计算
[2-4,7-2,3-7,6-3,5-6]
。如果您将参数的顺序切换为带(-)x(尾部x),那么您将把它更正为
[4-2,2-7,7-3,3-6,6-5]
,因为您现在正在计算
[2-4,7-2,3-7,6-3,5-6]
。如果您将参数的顺序交换为
zipWith(-)x(tail x)
,那么您将把它更正为
[4-2,2-7,7-3,3-6,6-5]
zipWith(-)x(tail x)
@pdexter如果您把它作为一个答案,我将批准它注意,您可以简单地编写
diff x=zipWith(-)x(tail x)
,而不使用
[]
,因为当
x
为空时
zipWith
不会计算其第二个参数,因此
tail
不会触发异常。
zipWith(-)x(tail x)
@pdexter如果你把它作为一个答案,我会批准它。注意,你可以简单地编写
diff x=zipWith(-)x(tail x)
,而不需要
[]
,因为当
x
为空时
zipWith
不会计算其第二个参数,因此
tail
不会触发异常。而且,作为一个稍微微妙的副作用,您也将停止对
[]
的崩溃。您还可以将其缩短为
diff=(zipWith(-)tail
(无点,不需要显式的基本情况)(虽然在你习惯了
之前可读性要差得多)。而且,作为一个微妙的副作用,你也将停止在
[]
上崩溃。你也可以将它缩短一点,如
diff=(zipWith(-)tail
(无点,不需要显式的基本情况)(尽管在习惯了
之前可读性要差得多)。