2013-04-21 78 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来检查列表中的任何元素是否满足谓词。 结合这两个你可以检查列表是否包含你的元素。