我正在尝试编写一个函数,以便它可以找到列表的前两个元素,添加它们,然后将它们放在列表的头部。但是,当我尝试这样做时,我遇到了意外错误。
单个元素列表的第一个函数工作得很好,但实际操作应该发生的第二个函数却没有。我认为将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.
如果有人能给我一些见解,我真的很感激!
答案 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"