我想使用Haskell读取列表并执行交替序列,因此从第一个元素开始添加每个其他元素并从第二个元素中减去每个其他元素。例如[1,2,3,4]将是1-2 + 3-4 = -2。我以为我已经想出了如何为特定长度的列表(我编写它来容纳空列表并列出多达4个元素长),但它没有做到我认为的那样。它只是返回列表中的第一个元素。这是我有:使用Haskell的交替系列
altSeries :: Num a => [a] -> a
altSeries [] = 0
altSeries (x:xs) = if length xs == 1 then x
else if length xs == 2 then x
else if length xs == 3 then (x - xs!!1 + xs!!2)
else (x - xs!!1 + xs!!2 - xs!!3)
另外,如果我想能够使用任何列表大小?
我不知道你怎么样测试你的代码,但它甚至不处理长度为1的列表。 – melpomene
对于大多数练习,你应该忘记'长度,头部,尾部,!!'存在,并且纯粹使用模式匹配和递归。 – chi