0

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

单元素列表的第一个函数工作得很好,但实际操作应该发生的第二个函数却不行。我认为这会将 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.

如果有人能给我一些见解,我将不胜感激!

4

1 回答 1

6

[xs]是表达式中 .. 的 lisf (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"
于 2013-09-12T21:27:08.453 回答