从列表的列表中删除列表,以及 Ocaml 中的更多内容
Removing a lists from a list of list, and more in Ocaml
我有类似的东西:[[x,y,z],[a,b,c],[x,b,c],[!x,a,o]]
(列表列表)
我想删除所有包含我搜索的元素的列表,例如,如果我搜索 x
,我将不得不有类似 [[a,b,c],[!x,a,o]]
.[=25= 的内容]
我知道,如果它是一个简单的列表,我将不得不这样做:
let funfilter elem l = List.filter (fun x -> x != elem) l;;
对于列表的列表,我需要在过滤器或 map
filter
中做一个过滤器。但我找不到正确的语法,而且我不确定这是否是删除列表所需要做的唯一事情。
其他平行问题,如果我只想删除列表列表中的元素,在这种情况下元素 !x
-> 结果 [[a,b,c],[a,o]]
,我应该怎么做?
我有个模糊的想法是 Lis.filter
of a List.filter
and/or List.map
of a List.filter
--------------------编辑------------------------
正如我在评论中所说,我做了一个名为 head 的函数 return 它在这样的列表中看到的 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;;
(我的列表名为passalista)
然后我就做了 funfilter (head(head passalista)) passalista
在它旁边我打印了我的 passalista 并且值都是相同的。
我现在做错了什么? :s
我需要澄清一些事情以使问题更容易吗?
你需要List.mem
:
let funfilter elem xs =
List.filter (fun inner -> not (List.mem elem inner)) xs
其中 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]]
更新:根据 Anton Trunov 的建议将 List.exists
替换为 List.mem
。
我有类似的东西:[[x,y,z],[a,b,c],[x,b,c],[!x,a,o]]
(列表列表)
我想删除所有包含我搜索的元素的列表,例如,如果我搜索 x
,我将不得不有类似 [[a,b,c],[!x,a,o]]
.[=25= 的内容]
我知道,如果它是一个简单的列表,我将不得不这样做:
let funfilter elem l = List.filter (fun x -> x != elem) l;;
对于列表的列表,我需要在过滤器或 map
filter
中做一个过滤器。但我找不到正确的语法,而且我不确定这是否是删除列表所需要做的唯一事情。
其他平行问题,如果我只想删除列表列表中的元素,在这种情况下元素 !x
-> 结果 [[a,b,c],[a,o]]
,我应该怎么做?
我有个模糊的想法是 Lis.filter
of a List.filter
and/or List.map
of a List.filter
--------------------编辑------------------------
正如我在评论中所说,我做了一个名为 head 的函数 return 它在这样的列表中看到的 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;;
(我的列表名为passalista)
然后我就做了 funfilter (head(head passalista)) passalista
在它旁边我打印了我的 passalista 并且值都是相同的。
我现在做错了什么? :s 我需要澄清一些事情以使问题更容易吗?
你需要List.mem
:
let funfilter elem xs =
List.filter (fun inner -> not (List.mem elem inner)) xs
其中 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]]
更新:根据 Anton Trunov 的建议将 List.exists
替换为 List.mem
。