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