Ocaml 找到值时从列表中删除项目

Ocaml 找到值时从列表中删除项目,ocaml,Ocaml,我有以下清单: let myList = [(1,2,0);(1,3,0);(1,4,0);(2,6,0);(3,5,0);(4,6,0);(6,5,0);(6,7,0);(5,4,0)];; 当第一个位置等于一个数字时,我想删除列表中的每个元素,例如,如果我删除以1开头的元素,结果必须是: [(2,6,0);(3,5,0);(4,6,0);(6,5,0);(6,7,0);(5,4,0)];; 来自OCaml的: 以下函数将三元组的第一个元素与常量进行比较n let first_is n (

我有以下清单:

let myList = [(1,2,0);(1,3,0);(1,4,0);(2,6,0);(3,5,0);(4,6,0);(6,5,0);(6,7,0);(5,4,0)];;
当第一个位置等于一个数字时,我想删除列表中的每个元素,例如,如果我删除以1开头的元素,结果必须是:

[(2,6,0);(3,5,0);(4,6,0);(6,5,0);(6,7,0);(5,4,0)];;
来自OCaml的:

以下函数将三元组的第一个元素与常量进行比较
n

let first_is n (m,_,_) = n = m
然后,您可以使用此选项筛选您的列表:

List.filter (first_is 1) [1,2,3;4,5,6;7,8,9]
这将删除所有不满足谓词的元素,即,在给定示例中,它将返回一个只有一个三元组的列表:
[1,2,3]

因为您想要相反的结果,所以您可以定义谓词:

let first_isn't n (m,_,_) = n <> m
让first_不是n(m,u,u)=n m
交互式顶层中的完整示例:

# let xs = [1,2,0;1,3,0;1,4,0;2,6,0;3,5,0;4,6,0;6,5,0;6,7,0;5,4,0];;
val xs : (int * int * int) list =
  [(1, 2, 0); (1, 3, 0); (1, 4, 0); (2, 6, 0); (3, 5, 0); (4, 6, 0);
   (6, 5, 0); (6, 7, 0); (5, 4, 0)]
# let first_isn't n (m,_,_) = n <> m;;
val first_isn't : 'a -> 'a * 'b * 'c -> bool = <fun>
# List.filter (first_isn't 1) xs;;
- : (int * int * int) list =
[(2, 6, 0); (3, 5, 0); (4, 6, 0); (6, 5, 0); (6, 7, 0); (5, 4, 0)]    
#设xs=[1,2,0;1,3,0;1,4,0;2,6,0;3,5,0;4,6,0;6,5,0;6,7,0;5,4,0];;
VALXS:(int*int*int)列表=
[(1, 2, 0); (1, 3, 0); (1, 4, 0); (2, 6, 0); (3, 5, 0); (4, 6, 0);
(6, 5, 0); (6, 7, 0); (5, 4, 0)]
#让第一个_不是n(m,u,u)=n m;;
val first_不是:'a->'a*'b*'c->bool=
#List.filter(first_不是1)xs;;
-:(int*int*int)列表=
[(2, 6, 0); (3, 5, 0); (4, 6, 0); (6, 5, 0); (6, 7, 0); (5, 4, 0)]    
# let xs = [1,2,0;1,3,0;1,4,0;2,6,0;3,5,0;4,6,0;6,5,0;6,7,0;5,4,0];;
val xs : (int * int * int) list =
  [(1, 2, 0); (1, 3, 0); (1, 4, 0); (2, 6, 0); (3, 5, 0); (4, 6, 0);
   (6, 5, 0); (6, 7, 0); (5, 4, 0)]
# let first_isn't n (m,_,_) = n <> m;;
val first_isn't : 'a -> 'a * 'b * 'c -> bool = <fun>
# List.filter (first_isn't 1) xs;;
- : (int * int * int) list =
[(2, 6, 0); (3, 5, 0); (4, 6, 0); (6, 5, 0); (6, 7, 0); (5, 4, 0)]