List 递归OCaml函数不工作

List 递归OCaml函数不工作,list,recursion,ocaml,List,Recursion,Ocaml,我正在使用以下代码尝试将整数列表中连续数字的平均值放入新列表中: let newList = [] let rec average2 xs = match xs with | [] -> newList | x :: [] -> newList | x :: x' :: [xs] -> append newList [((x + x')/2)] average2 x' :: [xs];; 但我一直在犯以下错误,不明白为什么: 错误:此函数的类型为'a list->'a l

我正在使用以下代码尝试将整数列表中连续数字的平均值放入新列表中:

 let newList = []
let rec average2 xs = 
match xs with
| [] -> newList
| x :: [] -> newList
| x :: x' :: [xs] -> append newList [((x + x')/2)] average2 x' :: [xs];;
但我一直在犯以下错误,不明白为什么:
错误:此函数的类型为'a list->'a list->'它应用于太多参数的列表;也许你忘了一个“;”

average2
函数传递给
append
函数,而不是在最后一行调用它。另外,
newList
是空的,不会进行变异,也不会从中读取。您可以在返回列表时向列表中添加一个新的头

换成

((x + x')/2) :: (average2 x' :: [xs])

为什么有
newList
?它总是一个空列表。@Palle我想用它作为变量的近亲,不断地向
newList
添加元素。它是常量,从不从代码中读取。我不是在模式匹配的第三行中向列表追加内容吗
append
函数返回一个新列表,其中第一个列表追加到第二个列表。不会对任何参数进行变异。请从参数列表中删除
newList
。反正是一张空名单。