计算矩阵的踪迹;语法错误

时间:2019-04-16 16:19:41

标签: recursion ocaml

我的任务是编写OCAML代码,以计算方矩阵的迹线(矩阵对角线内的值)。另外,根据我自己的理解,我还想编写代码以生成方阵轨迹的列表。

我已经利用List.map功能创建了一个尾部递归函数,该功能剥离了每一行的第一个元素,依此类推。

let trace m =
   let rec helper m acc =
      match m with
      |[] -> acc
      |(x::_) -> helper(List.map(fun(y::ys) -> ys)) (acc+x)
   in helper m 0 ;;

不幸的是,我相信我的语法已经关闭,我不确定如何解决这个问题。我认为我心中有正确的理论/想法,但执行不力。任何帮助将不胜感激

这是我在运行代码时遇到的错误:

This expression has type 'a list list -> 'a list list but an expression was expected of type 'b list
1:Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
[]

1 个答案:

答案 0 :(得分:0)

正如@glennsl所说,您应该做一个很好的问题的工作。例如,您没有告诉我们任何有关所看到的错误的信息。通常,您应该将错误文本复制/粘贴到您的问题中。

当我复制/粘贴您的代码时,我看到此片段的错误:

(List.map (fun (y :: ys) -> ys))

List.map具有两个参数:第一个是您具有的函数。第二个是要映射的列表,这里没有。由于您不提供列表,因此此表达式的值是一个需要列表并返回转换后的列表的函数。

由于helper的第一个参数是列表列表(我假设),而不是函数,因此您遇到类型错误。 (不是语法错误。)

您很有可能需要提供要在其上映射功能的列表。