我有類似:[[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'。 –