ocaml'列表列表函数元组

时间:2018-04-08 21:26:39

标签: list tuples ocaml

let sample_table4 = [
[["11"];["21"];["31"];["41"]];
[["12"];["22"];["32"]];
[["13"];["23"]];
[["14"]]];;

这是我在编写函数以获取其中一个数字

的问题
let tgvc (pos, table) = 
match pos with
|[] -> []
|i::[j] -> List.nth (List.nth table (j-1)) (i-1)
|i::_ -> []
;;
val tgvc : int list * 'a list list list -> 'a list = <fun>

我应该得到这个签名

tgvc ([3;2],sample_table4);;
val tgvc : int list * ’a list list -> ’a = <fun>
-: string list = ["32"]

功能中缺少什么? 我确定它现在必须递归。 即使它计算出正确的答案,但这不是正确的方法。 - &gt; []正是让我的

let rec tgvc (pos, table) = function
|_,[] -> []
|[i;1], h::_ -> List.nth h (i-1)
|[i;j], _::t -> tgvc ([i;j-1], t)
|_ -> []

|[i;j], _::t -> tgvc ([i;j-1], t)
                ^^^^^^^^^^^^^^^^^

错误:此表达式具有类型int list *'列表列表 - &gt; '一个列表        但是预期表达式为'a list

1 个答案:

答案 0 :(得分:0)

  

该功能缺少什么?

很多事情。您的函数只返回许多初始输入列表中的一个。你甚至不使用i indice。

我建议您考虑一下您的功能需要为给定的输入做些什么:

  • [i; 1], h::_ - 您处于理想清单的“前方”

  • [i; j], _::t - 还不是理想的列表(可能会有一些递归?)

  • _, [] - 空表

  • _ - 其他一切

修改

您上次实施时遇到两个问题。首先在你的第一个和最后一个分支中返回[],我想你想退出并出错,所以你可以抛出异常(例如通过failwith)。第二个问题实际上在第一行:get_table_values_cell (pos, table) = function,这意味着您将get_table_values_cell定义为具有两个参数的函数,您明确地给出一个((pos, table))而第二个问题由function引入{1}}关键字。所以你只需选择一个:get_table_values_cell = function