我想检查[[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;;
这项工作是在一维列表中进行的,但我只是太多的新手才能让它在二维上工作。
答案 0 :(得分:3)
首先,您的函数contains
在标准库中为List.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
顺便说一句,这里是使用标准库中的函数编写的:
# 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