Arrays 从列表列表中删除列表,以及在Ocaml中删除更多列表

Arrays 从列表列表中删除列表,以及在Ocaml中删除更多列表,arrays,list,ocaml,Arrays,List,Ocaml,我有这样的东西:[[x,y,z],[a,b,c],[x,b,c],[x,a,o](列表列表) 我想删除所有包含我搜索的元素的列表,例如,如果我搜索x,我必须有类似的内容,[[a,b,c],!x,a,o] 我知道,如果这是一个简单的列表,我将不得不做如下事情: let funfilter elem l=List.filter(fun x->x!=elem)l 对于列表列表,我需要在过滤器内部进行过滤,或者在映射中进行过滤。但是我找不到正确的语法,我也不确定这是否是删除列表所需要做的唯一事情 另一个

我有这样的东西:
[[x,y,z],[a,b,c],[x,b,c],[x,a,o]
(列表列表)

我想删除所有包含我搜索的元素的列表,例如,如果我搜索
x
,我必须有类似的内容,
[[a,b,c],!x,a,o]

我知道,如果这是一个简单的列表,我将不得不做如下事情:
let funfilter elem l=List.filter(fun x->x!=elem)l
对于列表列表,我需要在过滤器内部进行过滤,或者在
映射中进行过滤。但是我找不到正确的语法,我也不确定这是否是删除列表所需要做的唯一事情

另一个平行的问题,如果我只想删除列表列表中的元素,在这种情况下,元素
!x
->结果
[[a,b,c],[a,o]]
,我该怎么做

我有一个模糊的想法,那就是
列表的
Lis.filter
。filter
和/或
列表的
map
。filter

-------------------编辑--------------------
正如我在一篇评论中所说,我使用了一个名为head的函数来返回它在如下列表中看到的1º元素

let head = 
function 
x::_ -> x
| _ -> failwith "no head?";;
这个功能是:

let funfilter elem ll = 
List.filter (fun inner -> (List.exists (fun x -> x <> elem) inner)) ll;;
let funfilter elem ll=
List.filter(fun-inner->(List.exists(fun x->x elem)inner))ll;;
(我的列表名为passalista) 然后我就做了funfilter(head(head passalista))passalista
在它旁边,我打印了我的passalista,它们的值都是一样的

我现在做错了什么s 我需要澄清一些事情以使问题更容易?

您需要:

其中,
elem
是要用于筛选的元素,
xs
是列表列表

例如:

# let funfilter elem xs = 
    List.filter (fun inner -> not (List.mem elem inner)) xs;;
val funfilter : 'a -> 'a list list -> 'a list list = <fun>
# let passalista = [[1; 2]; [3; 2; 1]; [4]];;
val passalista : int list list = [[1; 2]; [3; 2; 1]; [4]]
# funfilter (List.hd (List.hd passalista)) passalista;;
- : int list list = [[4]]
#让funfilter元素xs=
List.filter(fun-inner->not(List.mem-elem-inner))xs;;
val funfilter:'a->'列表->'列表=
#让passalista=[1;2];[3;2;1];[4];;
val passalista:int list=[[1;2];[3;2;1];[4]]
#funfilter(List.hd(List.hd passalista))passalista;;
-:int list=[[4]]

更新:根据Anton Trunov的建议,将
列表.存在替换为
列表.mem

我想它不起作用了,我做了如下操作:我定义了一个名为head的函数,返回它看到的1º元素let head=function x::->x | |->failwith“no head?”;;然后我做了一个类似于您建议我使用的函数funfilter elem ll=List.filter(fun-inner->(List.exists(fun x->x-elem)inner))ll;;然后我做了一个类似funfilter的调用(head(head passalista))passalista;;(passalista是列表的列表)当我再次打印passalista时,它没有过滤任何内容,它的值与以前相同。我做错了什么吗?你可以使用
fun-inner->not(List.mem-elem-inner)
作为
List.filter的lambda,请查看上面的示例,它与你尝试的匹配吗?安东·特鲁诺夫,说得好!我已经将代码更新为使用
List.mem
。好的,我刚刚测试了它,它与我想要的完全匹配,谢谢!!现在我只需要了解如何删除列表列表中的一个变量,也许你的函数也能帮我做到这一点,再次感谢
# let funfilter elem xs = 
    List.filter (fun inner -> not (List.mem elem inner)) xs;;
val funfilter : 'a -> 'a list list -> 'a list list = <fun>
# let passalista = [[1; 2]; [3; 2; 1]; [4]];;
val passalista : int list list = [[1; 2]; [3; 2; 1]; [4]]
# funfilter (List.hd (List.hd passalista)) passalista;;
- : int list list = [[4]]