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

问题描述 投票:0回答:1

我的任务是编写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:
[]
recursion ocaml
1个回答
0
投票

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

当我复制/粘贴您的代码时,我发现此片段有错误:

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

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

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

您很可能需要提供要映射功能的列表。

© www.soinside.com 2019 - 2024. All rights reserved.