簡體   English   中英

從列表列表中刪除列表,以及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]]

我知道,如果這是一個簡單的List,則必須執行以下操作: let funfilter elem l = List.filter (fun x -> x != elem) l;; 對於列表列表,我需要在過濾器或map filter器內部進行filter 但我找不到正確的語法,因此我不確定是否唯一要做的就是刪除列表。

其他平行問題,如果在這種情況下,如果我只想刪除列表列表中的he元素,則元素!x >結果[[a,b,c],[a,o]] ,我應該怎么做它?

我有一個模糊的想法,那就是Lis.filterList.filter和/或List.mapList.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM