我有类似:[[x,y,z],[a,b,c],[x,b,c],[!x,a,o]]
(名单列表)从列表的列表中删除列表,以及更OCaml中
而且我要删除所有有我搜索的元素,例如列表,如果我搜索x
我将不得不有类似的,[[a,b,c],[!x,a,o]]
。
我知道,如果它是一个简单的列表,我将不得不做这样的事情: let funfilter elem l = List.filter (fun x -> x != elem) l;;
而对于名单的名单,我需要做一个过滤器或map
filter
内的过滤器。但我无法找到正确的语法,我不确定是否需要删除列表。
其他平行问题,如果我只想删除列表中的元素,在这种情况下,元素!x
- >结果[[a,b,c],[a,o]]
,它应该怎么做呢?
我有一个模糊的想法那是后话用的List.filter
一个List.filter
和/或List.map
的Lis.filter
------------------- EDIT-- -----------------------
正如我在评论中说的,我做了一个叫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;;
(我的清单列表被称为passalista) 然后,我只是做了funfilter (head(head passalista)) passalista
在它的旁边我印我passalista和值均相同的他们。
我现在做错了什么? :s 我需要澄清一些问题,使问题更容易?
我想它没有奏效我做了这样的事情:我定义了一个名为head的函数来返回它看到的1º元素让head = 函数 x :: _ - > x | _ - >“没有头”?然后我做了一个类似于你建议给我的功能的函数let funfilter elem ll = List.filter(fun inner - >(List.exists(fun x - > x <> elem)inner))ll ;;然后我做了一个这样的电话,就像这个过滤器(头(passalista))passalista ;; (passalista是列表的列表),它不会过滤任何东西,当我再次打印passalista时,它具有与以前相同的值。难道我做错了什么? –
你可以使用'fun inner - > not(List.mem elem inner)'作为'List.filter'的lambda' –
Joao Saraiva,请看看上面的例子,它与你想要做的事情相匹配吗?安东特鲁诺夫,好点!我更新了代码以使用'List.mem'。 –