2013-04-21 16 views
1

我創建一個列表的列表清單列表中的元素,例如:ocaml的是

list1 = [[1; 2]; [3; 4]] 

我試圖創建一個函數「is_element」,如果intiger是在將返回true。該列表,否則爲false。

它應該是如何工作的:

is_element list1 4;; 
- : bool = true 

我的嘗試:

let rec is_element x = function 
[[]] -> false 
| [(a:int)::l] -> (a:int) == x || is_element x [l];; 

我得到一個警告,這個功能似乎並沒有工作。

+1

您的功能不涵蓋所有情況下開始。例如,傳遞給函數的[]的情況不包括在內。 – 2013-04-21 13:44:24

回答

4
let rec is_element x lst = 
let rec aux y = function 
    [] -> false 
    | a::l -> a==y || aux y l 
in 
match lst with 
    [] -> false 
    | a::l -> aux x a || is_element x l;; 

您可以使用輔助函數來檢查元素是否包含在列表中,然後將此函數應用於列表的元素。 那麼你應該調用這個函數

is_element 4 list1;; 

或反轉參數(x和LST)的順序。

5

您可以使用List.mem來檢查元素是否是列表的一部分,您可以使用 List.exists來檢查列表中的任何元素是否滿足謂詞。 結合這兩個你可以檢查列表是否包含你的元素。