Haskell函数添加前两个列表的数量

时间:2013-09-12 21:17:21

标签: haskell

我正在尝试编写一个函数,以便它可以找到列表的前两个元素,添加它们,然后将它们放在列表的头部。但是,当我尝试这样做时,我遇到了意外错误。

单个元素列表的第一个函数工作得很好,但实际操作应该发生的第二个函数却没有。我认为将x从列表中删除,然后使用head(xs)获取以下元素,因此列表中的前两个可用,添加它们然后将它们放在列表的前面,如我所愿。

当我在command Plus [4,5,6]上运行时,我应该[9,6]但是我收到了这个错误:

    Couldn't match expected type `Int' with actual type `[Int]'
    In the expression: xs
    In the second argument of `(:)', namely `[xs]'
    In the expression: (x + head (xs)) : [xs]
Failed, modules loaded: none.

如果有人能给我一些见解,我真的很感激!

1 个答案:

答案 0 :(得分:6)

[xs]是表达式(x:xs) ~ ((x :: a) : (xs :: [a]))

中的..列表

和编译器说:

Couldn't match expected type `Int' with actual type `[Int]'

功能如下:

command :: Operation -> [Int] -> [Int]
command Plus (x:y:xs)     = x + y  : xs
command Plus _            = error "Not enough to conduct a plus operation"