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
答案 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