我的任务是编写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:
[]
答案 0 :(得分:0)
正如@glennsl所说,您应该做一个很好的问题的工作。例如,您没有告诉我们任何有关所看到的错误的信息。通常,您应该将错误文本复制/粘贴到您的问题中。
当我复制/粘贴您的代码时,我看到此片段的错误:
(List.map (fun (y :: ys) -> ys))
List.map
具有两个参数:第一个是您具有的函数。第二个是要映射的列表,这里没有。由于您不提供列表,因此此表达式的值是一个需要列表并返回转换后的列表的函数。
由于helper
的第一个参数是列表列表(我假设),而不是函数,因此您遇到类型错误。 (不是语法错误。)
您很有可能需要提供要在其上映射功能的列表。