Matrix 亚矩阵

Matrix 亚矩阵,matrix,ocaml,submatrix,Matrix,Ocaml,Submatrix,我试图检查一个矩阵是否是另一个矩阵的sbumatrix。但我必须使用类型列表。a我不能使用任何已定义的列表函数。很明显,我使用的是List hd,tl,但我将替换它 A当我试图调用我不理解的函数时出错 let moja_matrika1 = [[1; 2]; [3; 4]];; let moja_matrika2 = [[4; 7; 8]; [3; 2; 1]];; let rec does_it_contain (lis1, lis2) = if (List.hd lis1 = []

我试图检查一个矩阵是否是另一个矩阵的sbumatrix。但我必须使用类型列表。a我不能使用任何已定义的列表函数。很明显,我使用的是List hd,tl,但我将替换它

A当我试图调用我不理解的函数时出错

    let moja_matrika1 = [[1; 2]; [3; 4]];;
let moja_matrika2 = [[4; 7; 8]; [3; 2; 1]];;

let rec does_it_contain (lis1, lis2) =
if (List.hd lis1 = []) then false
else if (List.hd lis1 = lis2) then true
else does_it_contain ((List.tl lis1), lis2);;

let rec does_it (matrix, lis1) =
if (matrix = []) then false
else if does_it_contain (List.hd matrix, List.hd lis1) = true then true
else does_it (List.tl matrix, lis1);;

does_it (moja_matrika1, moja_matrika2);;

请帮忙

的签名包含和不包含:

   does_it (moja_matrika1, moja_matrika2);;
Error: This expression has type int list list
       but an expression was expected of type 'a list list list
       Type int is not compatible with type 'a list # 
它们都不能将2个矩阵作为参数(
'a list
'a list
不是您期望的矩阵)

此外,编写函数的代码就像编写C或java一样:参数不能通过Ocaml中的括号传递。括号用于元组-在这种情况下不有用。

我猜出来了

  'a list list * 'a list -> bool 
  'a list list list * 'a list list -> bool  

rep是List.tl的替代品,glava是List.hd的替代品。

那么,它是无用的,还是?对不起,我是Ocaml的初学者。我写了Delphi、Java和C,但Ocaml只是另外一回事。我似乎不能把我的头围绕着它。如果可能的话,有没有关于如何改进这段代码、使其工作的建议?首先谢谢,这没用。但它也给您的代码增加了一些惩罚,因为它创建了另一个数据结构(元组),您可以对其进行分解以处理每个元素。在较大的代码上,它会增加时间复杂度——甚至可能在使用大矩阵的代码上也是如此。“但我必须使用类型列表”:如果你在学习以外的任何事情上这样做,你不应该使用列表来表示矩阵,这是非常低效的。我知道,这是为了学校。
let rec does_it_contain (lis1, lis2) =
    if rep lis1 = [] then false
    else if rep lis2 = [] then false
  else if (  glava lis1 = glava lis2) then true
 else does_it_contain ( lis1, rep lis2);;

let rec does_it (matrica, matrica1) =
    if rep matrica = [] then false
    else if rep matrica1 = [] then false
    else if does_it_contain ( glava matrica, glava matrica1) = true then true
    else  does_it ( rep matrica,  rep matrica1);;


does_it(moja_matrika1, moja_matrika2);;