首页 文章

ocaml'列表列表函数元组

提问于
浏览
-2
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"]

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

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 *'列表列表 - >'列表但是表达式需要类型'列表

1 回答

  • 0

    功能中缺少什么?

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

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

    • [i; 1], h::_ - 您是理想列表的"in front"

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

    • _, [] - 空表

    • _ - 其他一切

    Edit

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

相关问题