[英]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]]
。
我知道,如果這是一個簡單的List,則必須執行以下操作: let funfilter elem l = List.filter (fun x -> x != elem) l;;
對於列表列表,我需要在過濾器或map
filter
器內部進行filter
。 但我找不到正確的語法,因此我不確定是否唯一要做的就是刪除列表。
其他平行問題,如果在這種情況下,如果我只想刪除列表列表中的he元素,則元素!x
>結果[[a,b,c],[a,o]]
,我應該怎么做它?
我有一個模糊的想法,那就是Lis.filter
的List.filter
和/或List.map
的List.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;;
(我的列表列表稱為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 List.mem
建議將List.exists
替換為List.exists
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.