如何计算连续对的差异乘积?

sou*_*w93 1 haskell

我必须从具有此函数定义的列表中计算每个连续对的差异之间的乘积f :: [Int] -> Int,例如:

f [3, 1, 4, 2, 5] = (3 - 1) * (1 - 4) * (4 - 2) * (2 - 5) 
                  = 36
Run Code Online (Sandbox Code Playgroud)

我必须递归地执行此操作,我知道如何处理数组中元素的乘积,但是如何从列表中选择元组并将它们的差异乘以下一个元组的差异,任何提示都将受到赞赏.到目前为止我有这个:

f :: [Int] -> Int
f [] = 1
f (x:xs) = x * f xs
Run Code Online (Sandbox Code Playgroud)

但这只给了我元素的产物.

kar*_*kfa 5

使用对创建中间结构

a = [3, 1, 4, 2, 5]
zip a (tail a)
Run Code Online (Sandbox Code Playgroud)

或更好地使用

zipWith (-) a (tail a)
Run Code Online (Sandbox Code Playgroud)

这将为您提供差异并继续使用该产品.

如果您需要实现自己的递归解决方案,则需要逐个使用输入元素.基本情况应该很容易你必须考虑null情况和单个元素的情况(可能是相同的!)

附加提示,为此基本案例编写函数

f (x:y:xs) = (x-y) * f ???
Run Code Online (Sandbox Code Playgroud)

和这个终端案例(如果相同的行为可能会合并).

f [] = ???
f [x] = ???
Run Code Online (Sandbox Code Playgroud)