2013-04-21 3 views
1

я создал список списков, например:Ocaml является элементом в списке списков

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

Я пытаюсь создать функцию «is_element», которая возвращает истину, если intiger в список и 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

Ваша функция не распространяется на все случаи для начала. Например, случай [], передаваемый функции, не рассматривается. –

ответ

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;; 

или инвертировать порядок параметров (х и LST).

5

Вы можете использовать List.mem, чтобы проверить, является ли элемент частью списка, и вы можете использовать List.exists, чтобы проверить, удовлетворяет ли какой-либо элемент списка предикату. Объединив эти два, вы можете проверить, содержит ли список списков ваши элементы.

Смежные вопросы