子矩阵 Ocaml
Submatrix Ocaml
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);;
我正在尝试检查一个矩阵是否是另一个矩阵的 sbumatrix。但我必须使用类型列表列表。而且我不能使用任何定义的列表函数。显然我正在使用 List hd, tl 但我会替换它。
当我尝试调用我不理解的函数时出现错误。
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 #
请帮忙!
does_it_contain 和 does_it 的签名非常友好:
'a list list * 'a list -> bool
'a list list list * 'a list list -> bool
None 其中能够将 2 个矩阵作为参数('a list
和 'a list list list
不是您期望的矩阵)
此外,您编写的函数代码就好像它是 C 或 java 一样:在 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);;
rep 是 List.tl 的替代品,glava 是 List.hd 的替代品。
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);;
我正在尝试检查一个矩阵是否是另一个矩阵的 sbumatrix。但我必须使用类型列表列表。而且我不能使用任何定义的列表函数。显然我正在使用 List hd, tl 但我会替换它。
当我尝试调用我不理解的函数时出现错误。
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 #
请帮忙!
does_it_contain 和 does_it 的签名非常友好:
'a list list * 'a list -> bool
'a list list list * 'a list list -> bool
None 其中能够将 2 个矩阵作为参数('a list
和 'a list list list
不是您期望的矩阵)
此外,您编写的函数代码就好像它是 C 或 java 一样:在 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);;
rep 是 List.tl 的替代品,glava 是 List.hd 的替代品。