【问题标题】:Recursive OCaml function not working递归 OCaml 函数不起作用
【发布时间】:2018-04-02 11:17:45
【问题描述】:

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

 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 -> 'a list 它应用于太多参数;也许你忘记了一个';'。

【问题讨论】:

  • 你为什么有newList?它始终是一个空列表。
  • @Palle 我想用它作为一个变量来继续添加元素
  • newList 是常量,从不从代码中读取。
  • 我没有在模式匹配的第三行中将东西附加到列表中
  • append 函数返回一个新列表,其中第一个列表附加到第二个列表。没有参数会发生变异。

标签: list recursion ocaml


【解决方案1】:

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

改成

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

【讨论】:

  • 从参数列表中删除 newList。无论如何,这是一个空列表。
猜你喜欢
  • 2019-03-04
  • 2012-10-17
  • 2015-12-08
  • 1970-01-01
  • 2018-07-14
  • 2013-05-20
  • 2014-04-03
  • 2013-02-23
相关资源
最近更新 更多