Я пытаюсь изменить список списков с определенными условиями, если вложенный список содержит x, я хотел бы удалить этот список из списка, если вложенный список содержит -x, я хотел бы удалить-x из этого списка, сохраняя при этом указанный список. Наконец, если вложенный список не содержит x или -x, я бы сохранил его.
Пока это то, что я пробовал, я не понимаю, почему он не работает какнамерение ...
let rec simplify i clauses =
match clauses with
| [] -> []
| x::y -> if (List.mem i x) then [] @ simplify i y else if (List.mem (-i) x) then List.filter (fun x -> x != -i) x @ simplify i y else [x];;
Ожидаемые результаты будут следующими:
simplify (-1) [[-1;2];[-1;7];[-2;1];[-2;3];[-3;2];[-3;4];[-4;5];[-4;15];[-5;2];[-5;4];[-6;5];[-7;1];[-7;8];[-7;6];[-8;7];[-8;9];[-8;10];[-9;8];[-10;8];[-10;11];[-10;12];[-11;9];[-11;10];[-12;6];[-12;10];[-12;13];[-12;15];[-13;11];[-14;13];[-14;15];[-15;12];[1];[-14]]
;;
- : int list list =
[[-14]; []; [-15; 12]; [-14; 15]; [-14; 13]; [-13; 11]; [-12; 15]; [-12; 13];
[-12; 10]; [-12; 6]; [-11; 10]; [-11; 9]; [-10; 12]; [-10; 11]; [-10; 8];
[-9; 8]; [-8; 10]; [-8; 9]; [-8; 7]; [-7; 6]; [-7; 8]; [-7]; [-6; 5];
[-5; 4]; [-5; 2]; [-4; 15]; [-4; 5]; [-3; 4]; [-3; 2]; [-2; 3]; [-2]]
В то время как фактические результаты:
simplifie_aux (-1) [[-1;2];[-1;7];[-2;1];[-2;3];[-3;2];[-3;4];[-4;5];[-4;15];[-5;2];[-5;4];[-6;5];[-7;1];[-7;8];[-7;6];[-8;7];[-8;9];[-8;10];[-9;8];[-10;8];[-10;11];[-10;12];[-11;9];[-11;10];[-12;6];[-12;10];[-12;13];[-12;15];[-13;11];[-14;13];[-14;15];[-15;12];[1];[-14]]
;;
- : int list list = [[-2]; [-2; 3]]
Спасибо.