Ocaml 检查矩阵是否包含数字

Ocaml 检查矩阵是否包含数字,ocaml,Ocaml,我想检查[[a,b,c][d,e,f]]类型的矩阵是否包含特定的数字。 我无法访问列表中的列表 let matrix = [[1;2;3]; [4;5;6]];; let rec contains mat x = match mat with | [] -> false | h::t -> if (h=x) then true else contains t x;; 这可以在一维列表上工作,但我是一个新手,无法让它在二维列表上工作。首先,您的函数包含的是标准库中的列表。mem(重

我想检查[[a,b,c][d,e,f]]类型的矩阵是否包含特定的数字。 我无法访问列表中的列表

let matrix = [[1;2;3]; [4;5;6]];;

let rec contains mat x = match mat with
| [] -> false
| h::t -> if (h=x) then true else contains t x;;

这可以在一维列表上工作,但我是一个新手,无法让它在二维列表上工作。

首先,您的函数
包含的
是标准库中的
列表。mem
(重新实现它来学习OCaml并没有任何问题)。
另外,
if(h=x)then true else contains t x
通常被写入
(h=x)| contains t x


对于您的问题,您需要迭代矩阵的每个子列表(可能表示一行),并针对每一行检查它是否包含您要查找的数字:

# let rec mat_contains mat x = match mat with
    | [] -> false
    | row::tl -> contains row x || mat_contains tl x;;
val mat_contains : 'a list list -> 'a -> bool = <fun>

# mat_contains matrix 4;;
- : bool = true
#让rec mat_包含mat x=将mat与匹配
|[]->false
|行::tl->包含行x | | mat|u包含tl x;;
val mat_包含:“一个列表->一个->布尔=
#mat_包含矩阵4;;
-:bool=true

另外,这里使用标准库中的函数编写:

# let mat_contains2 mat x = List.exists (List.mem x) mat;;
val mat_contains2 : 'a list list -> 'a -> bool = <fun>

# mat_contains2 matrix 4;;
- : bool = true
#让mat_包含2 mat x=List.exists(List.mem x)mat;;
val mat_包含2:'列表->a->bool=
#矩阵2包含矩阵4;;
-:bool=true

首先,您的函数
包含的
是标准库中的
列表。mem
(并不是说重新实现它来学习OCaml有什么问题)。
另外,
if(h=x)then true else contains t x
通常被写入
(h=x)| contains t x


对于您的问题,您需要迭代矩阵的每个子列表(可能表示一行),并针对每一行检查它是否包含您要查找的数字:

# let rec mat_contains mat x = match mat with
    | [] -> false
    | row::tl -> contains row x || mat_contains tl x;;
val mat_contains : 'a list list -> 'a -> bool = <fun>

# mat_contains matrix 4;;
- : bool = true
#让rec mat_包含mat x=将mat与匹配
|[]->false
|行::tl->包含行x | | mat|u包含tl x;;
val mat_包含:“一个列表->一个->布尔=
#mat_包含矩阵4;;
-:bool=true

另外,这里使用标准库中的函数编写:

# let mat_contains2 mat x = List.exists (List.mem x) mat;;
val mat_contains2 : 'a list list -> 'a -> bool = <fun>

# mat_contains2 matrix 4;;
- : bool = true
#让mat_包含2 mat x=List.exists(List.mem x)mat;;
val mat_包含2:'列表->a->bool=
#矩阵2包含矩阵4;;
-:bool=true

首先,您的函数
包含的
是标准库中的
列表。mem
(并不是说重新实现它来学习OCaml有什么问题)。
另外,
if(h=x)then true else contains t x
通常被写入
(h=x)| contains t x


对于您的问题,您需要迭代矩阵的每个子列表(可能表示一行),并针对每一行检查它是否包含您要查找的数字:

# let rec mat_contains mat x = match mat with
    | [] -> false
    | row::tl -> contains row x || mat_contains tl x;;
val mat_contains : 'a list list -> 'a -> bool = <fun>

# mat_contains matrix 4;;
- : bool = true
#让rec mat_包含mat x=将mat与匹配
|[]->false
|行::tl->包含行x | | mat|u包含tl x;;
val mat_包含:“一个列表->一个->布尔=
#mat_包含矩阵4;;
-:bool=true

另外,这里使用标准库中的函数编写:

# let mat_contains2 mat x = List.exists (List.mem x) mat;;
val mat_contains2 : 'a list list -> 'a -> bool = <fun>

# mat_contains2 matrix 4;;
- : bool = true
#让mat_包含2 mat x=List.exists(List.mem x)mat;;
val mat_包含2:'列表->a->bool=
#矩阵2包含矩阵4;;
-:bool=true

首先,您的函数
包含的
是标准库中的
列表。mem
(并不是说重新实现它来学习OCaml有什么问题)。
另外,
if(h=x)then true else contains t x
通常被写入
(h=x)| contains t x


对于您的问题,您需要迭代矩阵的每个子列表(可能表示一行),并针对每一行检查它是否包含您要查找的数字:

# let rec mat_contains mat x = match mat with
    | [] -> false
    | row::tl -> contains row x || mat_contains tl x;;
val mat_contains : 'a list list -> 'a -> bool = <fun>

# mat_contains matrix 4;;
- : bool = true
#让rec mat_包含mat x=将mat与匹配
|[]->false
|行::tl->包含行x | | mat|u包含tl x;;
val mat_包含:“一个列表->一个->布尔=
#mat_包含矩阵4;;
-:bool=true

另外,这里使用标准库中的函数编写:

# let mat_contains2 mat x = List.exists (List.mem x) mat;;
val mat_contains2 : 'a list list -> 'a -> bool = <fun>

# mat_contains2 matrix 4;;
- : bool = true
#让mat_包含2 mat x=List.exists(List.mem x)mat;;
val mat_包含2:'列表->a->bool=
#矩阵2包含矩阵4;;
-:bool=true